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 |