View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0004395 | The Dark Mod | Graphics | public | 17.10.2016 03:35 | 18.09.2017 13:32 |
Reporter | nbohr1more | Assigned To | duzenko | ||
Priority | normal | Severity | normal | Reproducibility | always |
Status | resolved | Resolution | fixed | ||
Product Version | TDM 2.04 | ||||
Target Version | TDM 2.05 | Fixed in Version | TDM 2.05 | ||
Summary | 0004395: Lightgem Pixel Pack Buffer Optimization | ||||
Description | Duzenko's OpenGL 2.1 "Pixel Pack Buffer" optimization. Discussion: http://forums.thedarkmod.com/topic/18346-lightgem-optimization/page-2#entry395542 | ||||
Tags | No tags attached. | ||||
Attached Files | duzenko_patch.diff (2,868 bytes)
Index: game/LightGem.cpp =================================================================== --- game/LightGem.cpp (revision 6634) +++ game/LightGem.cpp (working copy) @@ -429,16 +429,16 @@ // The order is RGB. NOTE: Serp - I have moved the scale into the rgb multiplier // this is to move the calculation into the precompiler (could move to .h directly) - m_fColVal[in] += (buffer[0] * (DARKMOD_LG_RED * DARKMOD_LG_SCALE) + - buffer[1] * (DARKMOD_LG_GREEN* DARKMOD_LG_SCALE) + - buffer[2] * (DARKMOD_LG_BLUE * DARKMOD_LG_SCALE)); + m_fColVal[in] += (buffer[0] * (DARKMOD_LG_RED ) + + buffer[1] * (DARKMOD_LG_GREEN) + + buffer[2] * (DARKMOD_LG_BLUE )); } } // Calculate the average for each value // Could be moved to the return - m_fColVal[0] *= DARKMOD_LG_TRIRATIO; - m_fColVal[1] *= DARKMOD_LG_TRIRATIO; - m_fColVal[2] *= DARKMOD_LG_TRIRATIO; - m_fColVal[3] *= DARKMOD_LG_TRIRATIO; + m_fColVal[0] *= DARKMOD_LG_TRIRATIO * DARKMOD_LG_SCALE; + m_fColVal[1] *= DARKMOD_LG_TRIRATIO * DARKMOD_LG_SCALE; + m_fColVal[2] *= DARKMOD_LG_TRIRATIO * DARKMOD_LG_SCALE; + m_fColVal[3] *= DARKMOD_LG_TRIRATIO * DARKMOD_LG_SCALE; } Index: renderer/RenderSystem.cpp =================================================================== --- renderer/RenderSystem.cpp (revision 6634) +++ renderer/RenderSystem.cpp (working copy) @@ -293,6 +293,7 @@ ============= */ idRenderSystemLocal::~idRenderSystemLocal( void ) { + qglDeleteBuffersARB(1, &pbo); } /* @@ -1011,7 +1012,27 @@ qglReadBuffer( GL_BACK ); - qglReadPixels(rc->x, rc->y, rc->width, rc->height, GL_RGB, GL_UNSIGNED_BYTE, buffer); + if (1) { + static int nbytes = 64 * 64 * 3; + if (!pbo) { + qglGenBuffersARB(1, &pbo); + qglBindBufferARB(GL_PIXEL_PACK_BUFFER, pbo); + qglBufferDataARB(GL_PIXEL_PACK_BUFFER, nbytes, NULL, GL_STREAM_READ); + qglBindBufferARB(GL_PIXEL_PACK_BUFFER, 0); + } + qglBindBufferARB(GL_PIXEL_PACK_BUFFER, pbo); + unsigned char* ptr = (unsigned char*)qglMapBufferARB(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); + if (ptr) { + memcpy(buffer, ptr, nbytes); + qglUnmapBufferARB(GL_PIXEL_PACK_BUFFER); + } + else { + // handle error + } + qglReadPixels(rc->x, rc->y, rc->width, rc->height, GL_RGB, GL_UNSIGNED_BYTE, 0); + qglBindBufferARB(GL_PIXEL_PACK_BUFFER, 0); + } else + qglReadPixels(rc->x, rc->y, rc->width, rc->height, GL_RGB, GL_UNSIGNED_BYTE, buffer); } /* Index: renderer/tr_local.h =================================================================== --- renderer/tr_local.h (revision 6634) +++ renderer/tr_local.h (working copy) @@ -696,6 +696,9 @@ ** by the frontend. */ class idRenderSystemLocal : public idRenderSystem { +private: + GLuint pbo; + public: // external functions virtual void Init( void ); | ||||
related to | 0003684 | new | Investigate GPL Renderer Improvements | |
related to | 0004621 | resolved | nbohr1more | Lightgem does not initialize when installing a new mission or via vid_restart. |
Src Rev 6635 Binary 14607 |
|
Fix for restart issue: Index: renderer/RenderSystem.cpp =================================================================== --- renderer/RenderSystem.cpp (revision 6638) +++ renderer/RenderSystem.cpp (working copy) @@ -1031,7 +1031,8 @@ qglUnmapBufferARB(GL_PIXEL_PACK_BUFFER); } else { - // handle error + // vid_restart ? + pbo = 0; } qglReadPixels(rc->x, rc->y, rc->width, rc->height, GL_RGB, GL_UNSIGNED_BYTE, 0); qglBindBufferARB(GL_PIXEL_PACK_BUFFER, 0); |
|
Binary 14609 Src 6640 |
|
Check the ARB extension before use SVN revision: 6735 |
|
Date Modified | Username | Field | Change |
---|---|---|---|
17.10.2016 03:35 | nbohr1more | New Issue | |
17.10.2016 03:35 | nbohr1more | Status | new => assigned |
17.10.2016 03:35 | nbohr1more | Assigned To | => nbohr1more |
17.10.2016 03:35 | nbohr1more | File Added: duzenko_patch.diff | |
17.10.2016 04:15 | nbohr1more | Note Added: 0008378 | |
17.10.2016 04:16 | nbohr1more | Status | assigned => feedback |
23.10.2016 15:34 | nbohr1more | Note Added: 0008388 | |
23.10.2016 15:34 | nbohr1more | Status | feedback => assigned |
24.10.2016 00:57 | nbohr1more | Note Added: 0008390 | |
24.10.2016 00:57 | nbohr1more | Status | assigned => feedback |
25.10.2016 04:01 | nbohr1more | Assigned To | nbohr1more => duzenko |
22.11.2016 17:37 | nbohr1more | Status | feedback => resolved |
22.11.2016 17:37 | nbohr1more | Resolution | open => fixed |
22.11.2016 17:37 | nbohr1more | Fixed in Version | => TDM 2.05 |
01.12.2016 21:07 | nbohr1more | Relationship added | related to 0003684 |
27.12.2016 14:44 | duzenko | Note Added: 0008646 | |
18.09.2017 13:32 | nbohr1more | Relationship added | related to 0004621 |