diff options
Diffstat (limited to 'indra/llrender')
-rw-r--r-- | indra/llrender/llrender.cpp | 61 | ||||
-rw-r--r-- | indra/llrender/llrender.h | 3 | ||||
-rw-r--r-- | indra/llrender/llrender2dutils.cpp | 2 | ||||
-rw-r--r-- | indra/llrender/llrendertarget.cpp | 19 | ||||
-rw-r--r-- | indra/llrender/llrendertarget.h | 4 | ||||
-rw-r--r-- | indra/llrender/llshadermgr.cpp | 6 | ||||
-rw-r--r-- | indra/llrender/llvertexbuffer.cpp | 145 | ||||
-rw-r--r-- | indra/llrender/llvertexbuffer.h | 1 |
8 files changed, 119 insertions, 122 deletions
diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp index 5d26a69d7b..332d15f76c 100644 --- a/indra/llrender/llrender.cpp +++ b/indra/llrender/llrender.cpp @@ -1,4 +1,4 @@ -/** + /** * @file llrender.cpp * @brief LLRender implementation * @@ -139,21 +139,21 @@ U32 LLTexUnit::getInternalType(eTextureType type) void LLTexUnit::refreshState(void) { -// We set dirty to true so that the tex unit knows to ignore caching -// and we reset the cached tex unit state + // We set dirty to true so that the tex unit knows to ignore caching + // and we reset the cached tex unit state -gGL.flush(); + gGL.flush(); -glActiveTexture(GL_TEXTURE0 + mIndex); + glActiveTexture(GL_TEXTURE0 + mIndex); -if (mCurrTexType != TT_NONE) -{ - glBindTexture(sGLTextureType[mCurrTexType], mCurrTexture); -} -else -{ - glBindTexture(GL_TEXTURE_2D, 0); -} + if (mCurrTexType != TT_NONE) + { + glBindTexture(sGLTextureType[mCurrTexType], mCurrTexture); + } + else + { + glBindTexture(GL_TEXTURE_2D, 0); + } } void LLTexUnit::activate(void) @@ -662,12 +662,12 @@ void LLTexUnit::debugTextureUnit(void) LLLightState::LLLightState(S32 index) : mIndex(index), -mEnabled(false), -mConstantAtten(1.f), -mLinearAtten(0.f), -mQuadraticAtten(0.f), -mSpotExponent(0.f), -mSpotCutoff(180.f) + mEnabled(false), + mConstantAtten(1.f), + mLinearAtten(0.f), + mQuadraticAtten(0.f), + mSpotExponent(0.f), + mSpotCutoff(180.f) { if (mIndex == 0) { @@ -826,7 +826,7 @@ void LLLightState::setSpotDirection(const LLVector3& direction) } LLRender::LLRender() -: mDirty(false), + : mDirty(false), mCount(0), mMode(LLRender::TRIANGLES), mCurrTextureUnitIndex(0) @@ -1457,7 +1457,7 @@ void LLRender::blendFunc(eBlendFactor sfactor, eBlendFactor dfactor) } void LLRender::blendFunc(eBlendFactor color_sfactor, eBlendFactor color_dfactor, - eBlendFactor alpha_sfactor, eBlendFactor alpha_dfactor) + eBlendFactor alpha_sfactor, eBlendFactor alpha_dfactor) { llassert(color_sfactor < BF_UNDEF); llassert(color_dfactor < BF_UNDEF); @@ -1474,7 +1474,7 @@ void LLRender::blendFunc(eBlendFactor color_sfactor, eBlendFactor color_dfactor, flush(); glBlendFuncSeparate(sGLBlendFactor[color_sfactor], sGLBlendFactor[color_dfactor], - sGLBlendFactor[alpha_sfactor], sGLBlendFactor[alpha_dfactor]); + sGLBlendFactor[alpha_sfactor], sGLBlendFactor[alpha_dfactor]); } } @@ -1612,8 +1612,8 @@ void LLRender::flush(std::string comment_) { if (mCount%3 != 0) { - count -= (mCount % 3); - LL_WARNS() << "Incomplete triangle requested." << LL_ENDL; + count -= (mCount % 3); + LL_WARNS() << "Incomplete triangle requested." << LL_ENDL; } } @@ -1667,6 +1667,11 @@ void LLRender::flush(std::string comment_) } } +void LLRender::flush() +{ + flush(""); +} + LLVertexBuffer* LLRender::bufferfromCache(U32 attribute_mask, U32 count) { LLVertexBuffer *vb = nullptr; @@ -1763,7 +1768,7 @@ LLVertexBuffer* LLRender::genBuffer(U32 attribute_mask, S32 count) if(gGLManager.mIsApple && LLVertexBuffer::getVertexBufferMode() == 0) { - vb->unmapBuffer(); + vb->unmapBuffer(); } vb->unbind(); @@ -2132,9 +2137,9 @@ glm::vec3 mul_mat4_vec3(const glm::mat4& mat, const glm::vec3& vec) #if 1 // SIMD path results in strange crashes. Fall back to scalar for now. const float w = vec[0] * mat[0][3] + vec[1] * mat[1][3] + vec[2] * mat[2][3] + mat[3][3]; return glm::vec3( - (vec[0] * mat[0][0] + vec[1] * mat[1][0] + vec[2] * mat[2][0] + mat[3][0]) / w, - (vec[0] * mat[0][1] + vec[1] * mat[1][1] + vec[2] * mat[2][1] + mat[3][1]) / w, - (vec[0] * mat[0][2] + vec[1] * mat[1][2] + vec[2] * mat[2][2] + mat[3][2]) / w + (vec[0] * mat[0][0] + vec[1] * mat[1][0] + vec[2] * mat[2][0] + mat[3][0]) / w, + (vec[0] * mat[0][1] + vec[1] * mat[1][1] + vec[2] * mat[2][1] + mat[3][1]) / w, + (vec[0] * mat[0][2] + vec[1] * mat[1][2] + vec[2] * mat[2][2] + mat[3][2]) / w ); #else LLVector4a x, y, z, s, t, p, q; diff --git a/indra/llrender/llrender.h b/indra/llrender/llrender.h index f0f9cd4364..a755ddd2b1 100644 --- a/indra/llrender/llrender.h +++ b/indra/llrender/llrender.h @@ -421,7 +421,8 @@ public: LLVector3 getUITranslation(); LLVector3 getUIScale(); - void flush(std::string comment_ = ""); + void flush(std::string comment_); + void flush(); // if list is set, will store buffers in list for later use, if list isn't set, will use cache void beginList(std::list<LLVertexBufferData> *list); diff --git a/indra/llrender/llrender2dutils.cpp b/indra/llrender/llrender2dutils.cpp index 0ee47dec6d..714df863cd 100644 --- a/indra/llrender/llrender2dutils.cpp +++ b/indra/llrender/llrender2dutils.cpp @@ -1801,10 +1801,12 @@ void LLRender2D::setLineWidth(F32 width) // If outside the allowed range, glLineWidth fails with "invalid value". // On Darwin, the range is [1, 1]. static GLfloat range[2]{0.0}; +#if GL_VERSION_1_2 if (range[1] == 0) { glGetFloatv(GL_SMOOTH_LINE_WIDTH_RANGE, range); } +#endif width *= lerp(LLRender::sUIGLScaleFactor.mV[VX], LLRender::sUIGLScaleFactor.mV[VY], 0.5f); glLineWidth(llclamp(width, range[0], range[1])); } diff --git a/indra/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp index 4fd32620e1..e898e03feb 100644 --- a/indra/llrender/llrendertarget.cpp +++ b/indra/llrender/llrendertarget.cpp @@ -326,7 +326,6 @@ bool LLRenderTarget::addColorAttachment(U32 color_fmt) { gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_MIRROR); LOG_GLERROR(mName + " setting address mode to TAM_MIRROR"); - } else #endif @@ -367,7 +366,6 @@ bool LLRenderTarget::allocateDepth() gGL.getTexUnit(0)->bindManual(mUsage, mDepth); U32 internal_type = LLTexUnit::getInternalType(mUsage); - LLImageGL::setManualImage(internal_type, 0, GL_DEPTH_COMPONENT24, mResX, mResY, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, NULL, false); gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_POINT); @@ -511,18 +509,17 @@ void LLRenderTarget::bindTarget(std::string name_, U32 mode_) GL_COLOR_ATTACHMENT3}; if (mTex.empty()) - { //no color buffer to draw to + { //no color buffer to draw to if(!mUseDepth) LL_WARNS() << mName << " HAS NO COLOR BUFFER AND NO DEPTH!!" << LL_ENDL; - glDrawBuffer(GL_NONE); + GLenum buffers[] = {GL_NONE}; + glDrawBuffers(0, buffers); glReadBuffer(GL_NONE); } else if(mMode == 0) { glDrawBuffers(static_cast<GLsizei>(mTex.size()), drawbuffers); glReadBuffer(GL_COLOR_ATTACHMENT0); - LOG_GLERROR(mName+" read and write buffers"); - } else if(mMode == 1) { @@ -532,7 +529,8 @@ void LLRenderTarget::bindTarget(std::string name_, U32 mode_) } else if(mMode == 2) { - glDrawBuffer(GL_NONE); + GLenum buffers[] = {GL_NONE}; + glDrawBuffers(0, buffers); glReadBuffer(GL_COLOR_ATTACHMENT0); LOG_GLERROR(mName+" read buffer"); } @@ -555,8 +553,11 @@ void LLRenderTarget::clear(U32 mask_in) U32 mask = 0; if(!mTex.empty()) mask |= GL_COLOR_BUFFER_BIT; - if (mUseDepth) mask |= GL_DEPTH_BUFFER_BIT; + if (mUseDepth) + { + mask |= GL_DEPTH_BUFFER_BIT; + } if (mFBO) { check_framebuffer_status(); @@ -724,4 +725,4 @@ U32 LLRenderTarget::getTarget() else if(mMode == 2) target = GL_READ_FRAMEBUFFER; return target; -}
\ No newline at end of file +} diff --git a/indra/llrender/llrendertarget.h b/indra/llrender/llrendertarget.h index 583d0054ac..ce3025f280 100644 --- a/indra/llrender/llrendertarget.h +++ b/indra/llrender/llrendertarget.h @@ -33,9 +33,9 @@ #include "llrender.h" /* -Wrapper around OpenGL framebuffer objects for use in render-to-texture + Wrapper around OpenGL framebuffer objects for use in render-to-texture -SAMPLE USAGE: + SAMPLE USAGE: LLRenderTarget target; diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp index fa1c686e8e..81d45bc431 100644 --- a/indra/llrender/llshadermgr.cpp +++ b/indra/llrender/llshadermgr.cpp @@ -451,7 +451,7 @@ void LLShaderMgr::dumpObjectLog(GLuint ret, bool warns, const std::string& filen LL_SHADER_LOADING_WARNS() << "Shader loading from " << fname << LL_ENDL; LL_SHADER_LOADING_WARNS() << "\n" << log << LL_ENDL; } -} + } GLuint LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shader_level, GLenum type, std::map<std::string, std::string>* defines, S32 texture_index_channels) { @@ -740,7 +740,7 @@ GLuint LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shader_lev //copy file into memory enum { - flag_write_to_out_of_extra_block_area = 0x01 + flag_write_to_out_of_extra_block_area = 0x01 , flag_extra_block_marker_was_found = 0x02 }; @@ -756,7 +756,7 @@ GLuint LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shader_lev #endif while(NULL != fgets((char *)buff, 1024, file) - && shader_code_count < (LL_ARRAY_SIZE(shader_code_text) - LL_ARRAY_SIZE(extra_code_text))) + && shader_code_count < (LL_ARRAY_SIZE(shader_code_text) - LL_ARRAY_SIZE(extra_code_text))) { file_lines_count++; diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp index 040dde7317..1bd7a57cd9 100644 --- a/indra/llrender/llvertexbuffer.cpp +++ b/indra/llrender/llvertexbuffer.cpp @@ -354,7 +354,6 @@ public: { //allocate a new buffer LL_PROFILE_GPU_ZONE("vbo alloc"); - data = (U8*) ll_aligned_malloc_16(size); if (type == GL_ARRAY_BUFFER) @@ -382,7 +381,6 @@ public: } mAllocated -= size; - if (name) { delete_buffers(1, &name); @@ -1396,12 +1394,12 @@ void LLVertexBuffer::flush_vbo(GLenum target, U32 start, U32 end, void* data, U8 else { //LL_WARNS() << "flush_vbo mode 0" << LL_ENDL; - // on OS X, flush_vbo doesn't actually write to the GL buffer, so be sure to call - // _mapBuffer to tag the buffer for flushing to GL - _mapBuffer(); - LL_PROFILE_ZONE_NAMED_CATEGORY_VERTEX("vb memcpy"); - // copy into mapped buffer - memcpy(dst+start, data, end-start+1); + // on OS X, flush_vbo doesn't actually write to the GL buffer, so be sure to call + // _mapBuffer to tag the buffer for flushing to GL + _mapBuffer(); + LL_PROFILE_ZONE_NAMED_CATEGORY_VERTEX("vb memcpy"); + // copy into mapped buffer + memcpy(dst+start, data, end-start+1); } } else @@ -1706,7 +1704,9 @@ void LLVertexBuffer::setBuffer() U32 data_mask = LLGLSLShader::sCurBoundShaderPtr->mAttributeMask; // this Vertex Buffer must provide all necessary attributes for currently bound shader - llassert_msg((data_mask & mTypeMask) == data_mask, "Attribute mask mismatch! mTypeMask should be a superset of data_mask. data_mask: 0x" << std::hex << data_mask << " mTypeMask: 0x" << mTypeMask << " Missing: 0x" << (data_mask & ~mTypeMask) << std::dec); + llassert_msg((data_mask & mTypeMask) == data_mask, + "Attribute mask mismatch! mTypeMask should be a superset of data_mask. data_mask: 0x" + << std::hex << data_mask << " mTypeMask: 0x" << mTypeMask << " Missing: 0x" << (data_mask & ~mTypeMask) << std::dec); if (sGLRenderBuffer != mGLBuffer) { @@ -1742,80 +1742,70 @@ void LLVertexBuffer::setupVertexBuffer() LOG_GLERROR("LLVertexBuffer::setupVertexBuffer()"); U8* base = nullptr; - AttributeType loc; - void* ptr = nullptr; - U32 data_mask = LLGLSLShader::sCurBoundShaderPtr->mAttributeMask; - if (data_mask & MAP_VERTEX) - { - loc = TYPE_VERTEX; - ptr = (void*)(base + mOffsets[TYPE_VERTEX]); - glVertexAttribPointer(loc, 3, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_VERTEX], ptr); - - LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_VERTEX"); - } - if (data_mask & MAP_NORMAL) { - loc = TYPE_NORMAL; - ptr = (void*)(base + mOffsets[TYPE_NORMAL]); + AttributeType loc = TYPE_NORMAL; + void* ptr = (void*)(base + mOffsets[TYPE_NORMAL]); glVertexAttribPointer(loc, 3, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_NORMAL], ptr); LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_NORMAL"); } - - if (data_mask & MAP_TEXCOORD0) + if (data_mask & MAP_TEXCOORD3) { - loc = TYPE_TEXCOORD0; - //glEnableVertexAttribArray(loc); - ptr = (void*)(base + mOffsets[TYPE_TEXCOORD0]); - glVertexAttribPointer(loc, 2, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD0], ptr); + AttributeType loc = TYPE_TEXCOORD3; + void* ptr = (void*)(base + mOffsets[TYPE_TEXCOORD3]); + glVertexAttribPointer(loc, 2, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD3], ptr); - LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_TEXCOORD0"); + LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_TEXCOORD3"); } + if (data_mask & MAP_TEXCOORD2) + { + AttributeType loc = TYPE_TEXCOORD2; + void* ptr = (void*)(base + mOffsets[TYPE_TEXCOORD2]); + glVertexAttribPointer(loc, 2, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD2], ptr); + LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_TEXCOORD2"); + } if (data_mask & MAP_TEXCOORD1) { - loc = TYPE_TEXCOORD1; - ptr = (void*)(base + mOffsets[TYPE_TEXCOORD1]); + AttributeType loc = TYPE_TEXCOORD1; + void* ptr = (void*)(base + mOffsets[TYPE_TEXCOORD1]); glVertexAttribPointer(loc, 2, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD1], ptr); LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_TEXCOORD1"); } - - if (data_mask & MAP_TEXCOORD2) + if (data_mask & MAP_TANGENT) { - loc = TYPE_TEXCOORD2; - ptr = (void*)(base + mOffsets[TYPE_TEXCOORD2]); - glVertexAttribPointer(loc, 2, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD2], ptr); + AttributeType loc = TYPE_TANGENT; + void* ptr = (void*)(base + mOffsets[TYPE_TANGENT]); + glVertexAttribPointer(loc, 4, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_TANGENT], ptr); - LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_TEXCOORD2"); + LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_TANGENT"); } - - if (data_mask & MAP_TEXCOORD3) + if (data_mask & MAP_TEXCOORD0) { - loc = TYPE_TEXCOORD3; - ptr = (void*)(base + mOffsets[TYPE_TEXCOORD3]); - glVertexAttribPointer(loc, 2, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD3], ptr); + AttributeType loc = TYPE_TEXCOORD0; + //glEnableVertexAttribArray(loc); + void* ptr = (void*)(base + mOffsets[TYPE_TEXCOORD0]); + glVertexAttribPointer(loc, 2, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD0], ptr); - LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_TEXCOORD3"); + LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_TEXCOORD0"); } - if (data_mask & MAP_COLOR) { - loc = TYPE_COLOR; + AttributeType loc = TYPE_COLOR; //bind emissive instead of color pointer if emissive is present - ptr = (data_mask & MAP_EMISSIVE) ? (void*)(base + mOffsets[TYPE_EMISSIVE]) : (void*)(base + mOffsets[TYPE_COLOR]); + void* ptr = (data_mask & MAP_EMISSIVE) ? (void*)(base + mOffsets[TYPE_EMISSIVE]) : (void*)(base + mOffsets[TYPE_COLOR]); glVertexAttribPointer(loc, 4, GL_UNSIGNED_BYTE, GL_TRUE, LLVertexBuffer::sTypeSize[TYPE_COLOR], ptr); LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_COLOR"); } - if (data_mask & MAP_EMISSIVE) { - loc = TYPE_EMISSIVE; - ptr = (void*)(base + mOffsets[TYPE_EMISSIVE]); + AttributeType loc = TYPE_EMISSIVE; + void* ptr = (void*)(base + mOffsets[TYPE_EMISSIVE]); glVertexAttribPointer(loc, 4, GL_UNSIGNED_BYTE, GL_TRUE, LLVertexBuffer::sTypeSize[TYPE_EMISSIVE], ptr); LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_EMISSIVE"); @@ -1828,60 +1818,55 @@ void LLVertexBuffer::setupVertexBuffer() LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_COLOR"); } } - - if (data_mask & MAP_TANGENT) - { - loc = TYPE_TANGENT; - ptr = (void*)(base + mOffsets[TYPE_TANGENT]); - glVertexAttribPointer(loc, 4, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_TANGENT], ptr); - - LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_TANGENT"); - } - if (data_mask & MAP_WEIGHT) { - loc = TYPE_WEIGHT; - ptr = (void*)(base + mOffsets[TYPE_WEIGHT]); + AttributeType loc = TYPE_WEIGHT; + void* ptr = (void*)(base + mOffsets[TYPE_WEIGHT]); glVertexAttribPointer(loc, 1, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_WEIGHT], ptr); LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_WEIGHT"); } - if (data_mask & MAP_WEIGHT4) { - loc = TYPE_WEIGHT4; - ptr = (void*)(base + mOffsets[TYPE_WEIGHT4]); + AttributeType loc = TYPE_WEIGHT4; + void* ptr = (void*)(base + mOffsets[TYPE_WEIGHT4]); glVertexAttribPointer(loc, 4, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_WEIGHT4], ptr); LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_WEIGHT4"); } + if (data_mask & MAP_JOINT) + { + AttributeType loc = TYPE_JOINT; + void* ptr = (void*)(base + mOffsets[TYPE_JOINT]); + glVertexAttribIPointer(loc, 4, GL_UNSIGNED_SHORT, LLVertexBuffer::sTypeSize[TYPE_JOINT], ptr); + LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_JOINT"); + } if (data_mask & MAP_CLOTHWEIGHT) { - loc = TYPE_CLOTHWEIGHT; - ptr = (void*)(base + mOffsets[TYPE_CLOTHWEIGHT]); + AttributeType loc = TYPE_CLOTHWEIGHT; + void* ptr = (void*)(base + mOffsets[TYPE_CLOTHWEIGHT]); glVertexAttribPointer(loc, 4, GL_FLOAT, GL_TRUE, LLVertexBuffer::sTypeSize[TYPE_CLOTHWEIGHT], ptr); LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_CLOTHWEIGHT"); } - if (data_mask & MAP_JOINT) - { - loc = TYPE_JOINT; - ptr = (void*)(base + mOffsets[TYPE_JOINT]); - glVertexAttribIPointer(loc, 4, GL_UNSIGNED_SHORT, LLVertexBuffer::sTypeSize[TYPE_JOINT], ptr); - - LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_JOINT"); - } - if (data_mask & MAP_TEXTURE_INDEX) { - loc = TYPE_TEXTURE_INDEX; - ptr = (void*)(base + mOffsets[TYPE_VERTEX] + 12); + AttributeType loc = TYPE_TEXTURE_INDEX; + void* ptr = (void*)(base + mOffsets[TYPE_VERTEX] + 12); glVertexAttribIPointer(loc, 1, GL_UNSIGNED_INT, LLVertexBuffer::sTypeSize[TYPE_VERTEX], ptr); LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_TEXTURE_INDEX"); } + if (data_mask & MAP_VERTEX) + { + AttributeType loc = TYPE_VERTEX; + void* ptr = (void*)(base + mOffsets[TYPE_VERTEX]); + glVertexAttribPointer(loc, 3, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_VERTEX], ptr); + + LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_VERTEX"); + } } void LLVertexBuffer::setPositionData(const LLVector4a* data) @@ -1995,3 +1980,7 @@ void LLVertexBuffer::setIndexData(const U32* data, U32 offset, U32 count) } flush_vbo(GL_ELEMENT_ARRAY_BUFFER, offset * sizeof(U32), (offset + count) * sizeof(U32) - 1, (U8*)data, mMappedIndexData); } + + + + diff --git a/indra/llrender/llvertexbuffer.h b/indra/llrender/llvertexbuffer.h index 4239477b8d..bf5f2b5ab6 100644 --- a/indra/llrender/llvertexbuffer.h +++ b/indra/llrender/llvertexbuffer.h @@ -130,7 +130,6 @@ public: static U32 getVertexBufferMode(); - //WARNING -- when updating these enums you MUST // 1 - update LLVertexBuffer::sTypeSize // 2 - update LLVertexBuffer::vb_type_name |