diff options
Diffstat (limited to 'indra/newview/llfloaterimagepreview.cpp')
-rw-r--r-- | indra/newview/llfloaterimagepreview.cpp | 91 |
1 files changed, 44 insertions, 47 deletions
diff --git a/indra/newview/llfloaterimagepreview.cpp b/indra/newview/llfloaterimagepreview.cpp index 3d29bb3286..4b0afd6db3 100644 --- a/indra/newview/llfloaterimagepreview.cpp +++ b/indra/newview/llfloaterimagepreview.cpp @@ -774,7 +774,9 @@ LLImagePreviewSculpted::LLImagePreviewSculpted(S32 width, S32 height) : LLDynami LLVolumeParams volume_params; volume_params.setType(LL_PCODE_PROFILE_CIRCLE, LL_PCODE_PATH_CIRCLE); volume_params.setSculptID(LLUUID::null, LL_SCULPT_TYPE_SPHERE); - mVolume = new LLVolume(volume_params, (F32) MAX_LOD); + + F32 const HIGHEST_LOD = 4.0f; + mVolume = new LLVolume(volume_params, HIGHEST_LOD); /* mDummyAvatar = new LLVOAvatar(LLUUID::null, LL_PCODE_LEGACY_AVATAR, gAgent.getRegion()); @@ -811,7 +813,36 @@ void LLImagePreviewSculpted::setPreviewTarget(LLImageRaw* imagep, F32 distance) { mVolume->sculpt(imagep->getWidth(), imagep->getHeight(), imagep->getComponents(), imagep->getData(), 0); } - + + const LLVolumeFace &vf = mVolume->getVolumeFace(0); + U32 num_indices = vf.mIndices.size(); + U32 num_vertices = vf.mVertices.size(); + + mVertexBuffer = new LLVertexBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL, 0); + mVertexBuffer->allocateBuffer(num_vertices, num_indices, TRUE); + + LLStrider<LLVector3> vertex_strider; + LLStrider<LLVector3> normal_strider; + LLStrider<U16> index_strider; + + mVertexBuffer->getVertexStrider(vertex_strider); + mVertexBuffer->getNormalStrider(normal_strider); + mVertexBuffer->getIndexStrider(index_strider); + + // build vertices and normals + for (U32 i = 0; (S32)i < num_vertices; i++) + { + *(vertex_strider++) = vf.mVertices[i].mPosition; + LLVector3 normal = vf.mVertices[i].mNormal; + normal.normalize(); + *(normal_strider++) = normal; + } + + // build indices + for (U16 i = 0; i < num_indices; i++) + { + *(index_strider++) = vf.mIndices[i]; + } } @@ -846,7 +877,7 @@ BOOL LLImagePreviewSculpted::render() glMatrixMode(GL_MODELVIEW); gGL.popMatrix(); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glClear(GL_DEPTH_BUFFER_BIT); LLVector3 target_pos(0, 0, 0); @@ -865,55 +896,21 @@ BOOL LLImagePreviewSculpted::render() LLViewerCamera::getInstance()->setView(LLViewerCamera::getInstance()->getDefaultFOV() / mCameraZoom); LLViewerCamera::getInstance()->setPerspective(FALSE, mOrigin.mX, mOrigin.mY, mWidth, mHeight, FALSE); - gPipeline.enableLightsAvatar(); - - gGL.pushMatrix(); - glScalef(0.5, 0.5, 0.5); - const LLVolumeFace &vf = mVolume->getVolumeFace(0); U32 num_indices = vf.mIndices.size(); - U32 num_vertices = vf.mVertices.size(); - - if (num_vertices > 0 && num_indices > 0) - { - glEnableClientState(GL_NORMAL_ARRAY); - // build vertices and normals - F32* vertices = new F32[num_vertices * 3]; - F32* normals = new F32[num_vertices * 3]; - - for (U32 i = 0; (S32)i < num_vertices; i++) - { - LLVector3 position = vf.mVertices[i].mPosition; - vertices[i*3] = position.mV[VX]; - vertices[i*3+1] = position.mV[VY]; - vertices[i*3+2] = position.mV[VZ]; - - LLVector3 normal = vf.mVertices[i].mNormal; - normals[i*3] = normal.mV[VX]; - normals[i*3+1] = normal.mV[VY]; - normals[i*3+2] = normal.mV[VZ]; - } + + mVertexBuffer->setBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL); - // build indices - U16* indices = new U16[num_indices]; - for (U16 i = 0; i < num_indices; i++) - { - indices[i] = vf.mIndices[i]; - } + gPipeline.enableLightsAvatar(); + gGL.pushMatrix(); + const F32 SCALE = 1.25f; + gGL.scalef(SCALE, SCALE, SCALE); + const F32 BRIGHTNESS = 0.9f; + gGL.color3f(BRIGHTNESS, BRIGHTNESS, BRIGHTNESS); + mVertexBuffer->draw(LLVertexBuffer::TRIANGLES, num_indices, 0); - gGL.color3f(0.4f, 0.4f, 0.4f); - glVertexPointer(3, GL_FLOAT, 0, (void *)vertices); - glNormalPointer(GL_FLOAT, 0, (void *)normals); - glDrawRangeElements(GL_TRIANGLES, 0, num_vertices-1, num_indices, GL_UNSIGNED_SHORT, (void *)indices); + gGL.popMatrix(); - gGL.popMatrix(); - glDisableClientState(GL_NORMAL_ARRAY); - - delete [] indices; - delete [] vertices; - delete [] normals; - } - return TRUE; } |