mirror of
https://github.com/yquake2/yquake2remaster.git
synced 2025-02-01 05:30:58 +00:00
GL3: Use HMM types in structs for UBOs, some cleanups
.. hmm_mat4 and hmm_vec4 are much easier to set than float arrays. removed some debug code from initShader2D()
This commit is contained in:
parent
101b9b14bb
commit
7cd86106dc
5 changed files with 36 additions and 71 deletions
|
@ -257,7 +257,6 @@ GL3_Draw_Fill(int x, int y, int w, int h, int c)
|
|||
byte v[4];
|
||||
} color;
|
||||
int i;
|
||||
float cf[3];
|
||||
|
||||
if ((unsigned)c > 255)
|
||||
{
|
||||
|
@ -276,8 +275,9 @@ GL3_Draw_Fill(int x, int y, int w, int h, int c)
|
|||
|
||||
for(i=0; i<3; ++i)
|
||||
{
|
||||
gl3state.uniCommonData.color[i] = color.v[i] * (1.0f/255.0f);
|
||||
gl3state.uniCommonData.color.Elements[i] = color.v[i] * (1.0f/255.0f);
|
||||
}
|
||||
gl3state.uniCommonData.color.A = 1.0f;
|
||||
|
||||
GL3_UpdateUBOCommon();
|
||||
|
||||
|
@ -295,7 +295,6 @@ GL3_Draw_FadeScreen(void)
|
|||
{
|
||||
float w = vid.width;
|
||||
float h = vid.height;
|
||||
int i=0;
|
||||
|
||||
GLfloat vBuf[8] = {
|
||||
// X, Y
|
||||
|
@ -307,15 +306,9 @@ GL3_Draw_FadeScreen(void)
|
|||
|
||||
glEnable(GL_BLEND);
|
||||
|
||||
for(i=0; i<3; ++i)
|
||||
{
|
||||
gl3state.uniCommonData.color[i] = 0.0f;
|
||||
}
|
||||
gl3state.uniCommonData.color[3] = 0.6f;
|
||||
|
||||
gl3state.uniCommonData.color = HMM_Vec4(0, 0, 0, 0.6f);
|
||||
GL3_UpdateUBOCommon();
|
||||
|
||||
|
||||
GL3_UseProgram(gl3state.si2Dcolor.shaderProgram);
|
||||
|
||||
GL3_BindVAO(vao2Dcolor);
|
||||
|
@ -323,11 +316,6 @@ GL3_Draw_FadeScreen(void)
|
|||
glBindBuffer(GL_ARRAY_BUFFER, vbo2D);
|
||||
glBufferData(GL_ARRAY_BUFFER, sizeof(vBuf), vBuf, GL_STREAM_DRAW);
|
||||
|
||||
//glEnableVertexAttribArray(gl3state.si2Dcolor.attribPosition);
|
||||
//qglVertexAttribPointer(gl3state.si2Dcolor.attribPosition, 2, GL_FLOAT, GL_FALSE, 4*sizeof(float), 0);
|
||||
//glEnableVertexAttribArray(gl3state.si2Dcolor.attribColor);
|
||||
//qglVertexAttribPointer(gl3state.si2Dcolor.attribColor, 2, GL_FLOAT, GL_FALSE, 6*sizeof(float), 2*sizeof(float));
|
||||
|
||||
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
||||
|
||||
glDisable(GL_BLEND);
|
||||
|
|
|
@ -440,6 +440,15 @@ GL3_Init(void)
|
|||
|
||||
R_Printf(PRINT_ALL, "Refresh: " REF_VERSION "\n");
|
||||
|
||||
if(sizeof(float) != sizeof(GLfloat))
|
||||
{
|
||||
// if this ever happens, things would explode because we feed vertex arrays and UBO data
|
||||
// using floats to OpenGL, which expects GLfloat (can't easily change, those floats are from HMM etc)
|
||||
// (but to be honest I very much doubt this will ever happen.)
|
||||
R_Printf(PRINT_ALL, "ref_gl3: sizeof(float) != sizeof(GLfloat) - we're in real trouble here.\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
GL3_Draw_GetPalette();
|
||||
|
||||
GL3_Register();
|
||||
|
@ -826,17 +835,7 @@ GL3_SetGL2D(void)
|
|||
|
||||
hmm_mat4 transMatr = HMM_Orthographic(0, vid.width, vid.height, 0, -99999, 99999);
|
||||
|
||||
/*
|
||||
glUseProgram(gl3state.si2Dcolor.shaderProgram);
|
||||
glUniformMatrix4fv(gl3state.si2Dcolor.uniProjMatrix , 1, GL_FALSE, transMatr.Elements[0]);
|
||||
glUseProgram(gl3state.si2D.shaderProgram);
|
||||
glUniformMatrix4fv(gl3state.si2D.uniProjMatrix , 1, GL_FALSE, transMatr.Elements[0]);
|
||||
*/
|
||||
|
||||
//memcpy(gl3state.uni2DData.transMat4, transMatr.Elements, 4*4*sizeof(GLfloat));
|
||||
for(int i=0; i<4; ++i)
|
||||
for(int j=0; j<4; ++j)
|
||||
gl3state.uni2DData.transMat4[i][j] = transMatr.Elements[i][j];
|
||||
gl3state.uni2DData.transMat4 = transMatr;
|
||||
|
||||
GL3_UpdateUBO2D();
|
||||
|
||||
|
@ -940,8 +939,8 @@ SetupGL(void)
|
|||
gl3_world_matrix = viewMat;
|
||||
}
|
||||
|
||||
memcpy(gl3state.uni3DData.transProjMat4, gl3_projectionMatrix.Elements, sizeof(gl3state.uni3DData.transProjMat4));
|
||||
memcpy(gl3state.uni3DData.transModelViewMat4, gl3_world_matrix.Elements, sizeof(gl3state.uni3DData.transProjMat4));
|
||||
gl3state.uni3DData.transProjMat4 = gl3_projectionMatrix;
|
||||
gl3state.uni3DData.transModelViewMat4 = gl3_world_matrix;
|
||||
|
||||
gl3state.uni3DData.time = gl3_newrefdef.time;
|
||||
|
||||
|
|
|
@ -413,35 +413,10 @@ initShader2D(gl3ShaderInfo_t* shaderInfo, const char* vertSrc, const char* fragS
|
|||
R_Printf(PRINT_ALL, "WARNING: OpenGL driver disagrees with us about UBO size of 'uniCommon': %i vs %i\n",
|
||||
blockSize, (int)sizeof(gl3state.uniCommonData));
|
||||
|
||||
// TODO: clean up?
|
||||
return false;
|
||||
goto err_cleanup;
|
||||
}
|
||||
|
||||
const GLchar *names[] = { "gamma", "intensity", "color" };
|
||||
|
||||
GLuint indices[3];
|
||||
glGetUniformIndices(prog, 3, names, indices);
|
||||
|
||||
GLint offset[3];
|
||||
glGetActiveUniformsiv(prog, 3, indices, GL_UNIFORM_OFFSET, offset);
|
||||
|
||||
printf("## uniCommon offsets in shader:");
|
||||
for(int i=0; i<3; ++i)
|
||||
{
|
||||
printf(" offset of '%s' is %d", names[i], offset[i]);
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
printf("## offsets in C: gamma: %zd intensity: %zd color: %zd\n",
|
||||
offsetof(gl3UniCommon_t, gamma),
|
||||
offsetof(gl3UniCommon_t, intensity),
|
||||
offsetof(gl3UniCommon_t, color));
|
||||
|
||||
|
||||
|
||||
glUniformBlockBinding(prog, blockIndex, GL3_BINDINGPOINT_UNICOMMON);
|
||||
|
||||
// TODO: something with glUniformBlockBinding() !
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -457,8 +432,7 @@ initShader2D(gl3ShaderInfo_t* shaderInfo, const char* vertSrc, const char* fragS
|
|||
if(blockSize != sizeof(gl3state.uni2DData))
|
||||
{
|
||||
R_Printf(PRINT_ALL, "WARNING: OpenGL driver disagrees with us about UBO size of 'uni2D'\n");
|
||||
// TODO: clean up?
|
||||
return false;
|
||||
goto err_cleanup;
|
||||
}
|
||||
|
||||
glUniformBlockBinding(prog, blockIndex, GL3_BINDINGPOINT_UNI2D);
|
||||
|
@ -466,11 +440,18 @@ initShader2D(gl3ShaderInfo_t* shaderInfo, const char* vertSrc, const char* fragS
|
|||
else
|
||||
{
|
||||
R_Printf(PRINT_ALL, "WARNING: Couldn't find uniform block index 'uni2D'\n");
|
||||
// TODO: clean up?
|
||||
return false;
|
||||
goto err_cleanup;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
err_cleanup:
|
||||
if(shaders2D[0] != 0) glDeleteShader(shaders2D[0]);
|
||||
if(shaders2D[1] != 0) glDeleteShader(shaders2D[1]);
|
||||
|
||||
if(prog != 0) glDeleteProgram(prog);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static qboolean
|
||||
|
@ -485,7 +466,6 @@ initShader3D(gl3ShaderInfo_t* shaderInfo, const char* vertSrc, const char* fragS
|
|||
glDeleteProgram(shaderInfo->shaderProgram);
|
||||
}
|
||||
|
||||
//shaderInfo->uniColor = shaderInfo->uniProjMatrix = shaderInfo->uniModelViewMatrix = -1;
|
||||
shaderInfo->shaderProgram = 0;
|
||||
|
||||
shaders3D[0] = CompileShader(GL_VERTEX_SHADER, vertexCommon3D, vertSrc);
|
||||
|
@ -571,8 +551,7 @@ static void initUBOs(void)
|
|||
{
|
||||
gl3state.uniCommonData.gamma = 1.0f/vid_gamma->value;
|
||||
gl3state.uniCommonData.intensity = intensity->value;
|
||||
GLfloat color[4] = {1, 1, 1, 1};
|
||||
memcpy(gl3state.uniCommonData.color, color, sizeof(color));
|
||||
gl3state.uniCommonData.color = HMM_Vec4(1, 1, 1, 1);
|
||||
|
||||
glGenBuffers(1, &gl3state.uniCommonUBO);
|
||||
glBindBuffer(GL_UNIFORM_BUFFER, gl3state.uniCommonUBO);
|
||||
|
@ -580,16 +559,16 @@ static void initUBOs(void)
|
|||
glBufferData(GL_UNIFORM_BUFFER, sizeof(gl3state.uniCommonData), &gl3state.uniCommonData, GL_DYNAMIC_DRAW);
|
||||
|
||||
// the matrix will be set to something more useful later, before being used
|
||||
memset(gl3state.uni2DData.transMat4, 0, sizeof(gl3state.uni2DData.transMat4));
|
||||
gl3state.uni2DData.transMat4 = HMM_Mat4();
|
||||
|
||||
glGenBuffers(1, &gl3state.uni2DUBO);
|
||||
glBindBuffer(GL_UNIFORM_BUFFER, gl3state.uni2DUBO);
|
||||
glBindBufferBase(GL_UNIFORM_BUFFER, GL3_BINDINGPOINT_UNI2D, gl3state.uni2DUBO);
|
||||
glBufferData(GL_UNIFORM_BUFFER, sizeof(gl3state.uni2DData), &gl3state.uni2DData, GL_DYNAMIC_DRAW);
|
||||
|
||||
|
||||
memset(&gl3state.uni3DData, 0, sizeof(gl3state.uni3DData));
|
||||
// the matrices will be set to something more useful later, before being used
|
||||
gl3state.uni3DData.transProjMat4 = HMM_Mat4();
|
||||
gl3state.uni3DData.transModelViewMat4 = HMM_Mat4();
|
||||
gl3state.uni3DData.scroll = 0.0f;
|
||||
gl3state.uni3DData.time = 0.0f;
|
||||
gl3state.uni3DData.alpha = 1.0f;
|
||||
|
|
|
@ -624,8 +624,7 @@ GL3_DrawAlphaSurfaces(void)
|
|||
float intens;
|
||||
|
||||
/* go back to the world matrix */
|
||||
//glLoadMatrixf(r_world_matrix);
|
||||
memcpy(gl3state.uni3DData.transModelViewMat4, gl3_world_matrix.Elements, 16*sizeof(float));
|
||||
gl3state.uni3DData.transModelViewMat4 = gl3_world_matrix;
|
||||
GL3_UpdateUBO3D();
|
||||
|
||||
glEnable(GL_BLEND);
|
||||
|
|
|
@ -118,21 +118,21 @@ typedef struct
|
|||
GLfloat intensity;
|
||||
|
||||
// entries of std140 UBOs are aligned to multiples of their own size
|
||||
// so we'll need to pad accordingly
|
||||
// so we'll need to pad accordingly for following vec4
|
||||
GLfloat _padding[2];
|
||||
|
||||
GLfloat color[4];
|
||||
hmm_vec4 color;
|
||||
} gl3UniCommon_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GLfloat transMat4[4][4];
|
||||
hmm_mat4 transMat4;
|
||||
} gl3Uni2D_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GLfloat transProjMat4[4][4];
|
||||
GLfloat transModelViewMat4[4][4];
|
||||
hmm_mat4 transProjMat4;
|
||||
hmm_mat4 transModelViewMat4;
|
||||
|
||||
GLfloat scroll; // for SURF_FLOWING
|
||||
GLfloat time; // for warping surfaces like water & possibly other things
|
||||
|
|
Loading…
Reference in a new issue