mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-24 17:49:52 +01:00
update vbos outside of lock
This commit is contained in:
parent
f06045498f
commit
40a4d98c29
120
src/render.c
120
src/render.c
@ -89,21 +89,21 @@ DWORD WINAPI render_main(void)
|
|||||||
int tex_size = tex_width * tex_height * sizeof(int);
|
int tex_size = tex_width * tex_height * sizeof(int);
|
||||||
int *tex = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, tex_size);
|
int *tex = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, tex_size);
|
||||||
|
|
||||||
BOOL got30 = glGenFramebuffers && glBindFramebuffer && glFramebufferTexture2D && glDrawBuffers &&
|
BOOL gotOpenglV3 = glGenFramebuffers && glBindFramebuffer && glFramebufferTexture2D && glDrawBuffers &&
|
||||||
glCheckFramebufferStatus && glUniform4f && glActiveTexture && glUniform1i &&
|
glCheckFramebufferStatus && glUniform4f && glActiveTexture && glUniform1i &&
|
||||||
glGetAttribLocation && glGenBuffers && glBindBuffer && glBufferData && glVertexAttribPointer &&
|
glGetAttribLocation && glGenBuffers && glBindBuffer && glBufferData && glVertexAttribPointer &&
|
||||||
glEnableVertexAttribArray && glUniform2fv && glUniformMatrix4fv && glGenVertexArrays && glBindVertexArray;
|
glEnableVertexAttribArray && glUniform2fv && glUniformMatrix4fv && glGenVertexArrays && glBindVertexArray;
|
||||||
|
|
||||||
BOOL got20 = glGetUniformLocation && glActiveTexture && glUniform1i;
|
BOOL gotOpenglV2 = glGetUniformLocation && glActiveTexture && glUniform1i;
|
||||||
|
|
||||||
GLuint paletteConvProgram = 0;
|
GLuint paletteConvProgram = 0;
|
||||||
if (got30)
|
if (gotOpenglV3)
|
||||||
paletteConvProgram = OpenGL_BuildProgram(PassthroughVertShaderSrc, PaletteFragShaderSrc);
|
paletteConvProgram = OpenGL_BuildProgram(PassthroughVertShaderSrc, PaletteFragShaderSrc);
|
||||||
else if (got20)
|
else if (gotOpenglV2)
|
||||||
paletteConvProgram = OpenGL_BuildProgram(PassthroughVertShader110Src, PaletteFragShader110Src);
|
paletteConvProgram = OpenGL_BuildProgram(PassthroughVertShader110Src, PaletteFragShader110Src);
|
||||||
|
|
||||||
GLuint scaleProgram = 0;
|
GLuint scaleProgram = 0;
|
||||||
if (got30)
|
if (gotOpenglV3)
|
||||||
scaleProgram = OpenGL_BuildProgramFromFile(ddraw->shader);
|
scaleProgram = OpenGL_BuildProgramFromFile(ddraw->shader);
|
||||||
|
|
||||||
// primary surface texture
|
// primary surface texture
|
||||||
@ -153,7 +153,7 @@ DWORD WINAPI render_main(void)
|
|||||||
surfaceUniLoc = glGetUniformLocation(paletteConvProgram, "SurfaceTex");
|
surfaceUniLoc = glGetUniformLocation(paletteConvProgram, "SurfaceTex");
|
||||||
paletteUniLoc = glGetUniformLocation(paletteConvProgram, "PaletteTex");
|
paletteUniLoc = glGetUniformLocation(paletteConvProgram, "PaletteTex");
|
||||||
|
|
||||||
if (got30)
|
if (gotOpenglV3)
|
||||||
{
|
{
|
||||||
glUseProgram(paletteConvProgram);
|
glUseProgram(paletteConvProgram);
|
||||||
|
|
||||||
@ -418,6 +418,8 @@ DWORD WINAPI render_main(void)
|
|||||||
scale_w = (float)ddraw->width / tex_width;
|
scale_w = (float)ddraw->width / tex_width;
|
||||||
scale_h = (float)ddraw->height / tex_height;
|
scale_h = (float)ddraw->height / tex_height;
|
||||||
|
|
||||||
|
BOOL scaleChanged = FALSE;
|
||||||
|
|
||||||
if (maxfps > 0)
|
if (maxfps > 0)
|
||||||
tick_start = timeGetTime();
|
tick_start = timeGetTime();
|
||||||
|
|
||||||
@ -425,8 +427,6 @@ DWORD WINAPI render_main(void)
|
|||||||
|
|
||||||
if (ddraw->primary && ddraw->primary->palette)
|
if (ddraw->primary && ddraw->primary->palette)
|
||||||
{
|
{
|
||||||
BOOL scaleChanged = FALSE;
|
|
||||||
|
|
||||||
if (ddraw->vhack && detect_cutscene())
|
if (ddraw->vhack && detect_cutscene())
|
||||||
{
|
{
|
||||||
scale_w *= (float)CUTSCENE_WIDTH / ddraw->width;
|
scale_w *= (float)CUTSCENE_WIDTH / ddraw->width;
|
||||||
@ -448,56 +448,6 @@ DWORD WINAPI render_main(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (scaleChanged)
|
|
||||||
{
|
|
||||||
if (scaleProgram && paletteConvProgram)
|
|
||||||
{
|
|
||||||
glBindVertexArray(mainVao);
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, mainVbos[1]);
|
|
||||||
GLfloat texCoordPal[] = {
|
|
||||||
0.0f, 0.0f,
|
|
||||||
0.0f, scale_h,
|
|
||||||
scale_w, scale_h,
|
|
||||||
scale_w, 0.0f,
|
|
||||||
};
|
|
||||||
glBufferData(GL_ARRAY_BUFFER, sizeof(texCoordPal), texCoordPal, GL_STATIC_DRAW);
|
|
||||||
glVertexAttribPointer(mainTexCoordAttrLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
|
|
||||||
glEnableVertexAttribArray(mainTexCoordAttrLoc);
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
|
||||||
glBindVertexArray(0);
|
|
||||||
|
|
||||||
glBindVertexArray(scaleVao);
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, scaleVbos[1]);
|
|
||||||
GLfloat texCoord[] = {
|
|
||||||
0.0f, 0.0f,
|
|
||||||
scale_w, 0.0f,
|
|
||||||
scale_w, scale_h,
|
|
||||||
0.0f, scale_h,
|
|
||||||
};
|
|
||||||
glBufferData(GL_ARRAY_BUFFER, sizeof(texCoord), texCoord, GL_STATIC_DRAW);
|
|
||||||
glVertexAttribPointer(scaleTexCoordAttrLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
|
|
||||||
glEnableVertexAttribArray(scaleTexCoordAttrLoc);
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
|
||||||
glBindVertexArray(0);
|
|
||||||
}
|
|
||||||
else if (got30 && paletteConvProgram)
|
|
||||||
{
|
|
||||||
glBindVertexArray(mainVao);
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, mainVbos[1]);
|
|
||||||
GLfloat texCoord[] = {
|
|
||||||
0.0f, 0.0f,
|
|
||||||
scale_w, 0.0f,
|
|
||||||
scale_w, scale_h,
|
|
||||||
0.0f, scale_h,
|
|
||||||
};
|
|
||||||
glBufferData(GL_ARRAY_BUFFER, sizeof(texCoord), texCoord, GL_STATIC_DRAW);
|
|
||||||
glVertexAttribPointer(mainTexCoordAttrLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
|
|
||||||
glEnableVertexAttribArray(mainTexCoordAttrLoc);
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
|
||||||
glBindVertexArray(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (paletteConvProgram)
|
if (paletteConvProgram)
|
||||||
{
|
{
|
||||||
glBindTexture(GL_TEXTURE_2D, paletteTexId);
|
glBindTexture(GL_TEXTURE_2D, paletteTexId);
|
||||||
@ -533,6 +483,56 @@ DWORD WINAPI render_main(void)
|
|||||||
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, ddraw->width, ddraw->height, GL_RGBA, GL_UNSIGNED_BYTE, tex);
|
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, ddraw->width, ddraw->height, GL_RGBA, GL_UNSIGNED_BYTE, tex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (scaleChanged)
|
||||||
|
{
|
||||||
|
if (scaleProgram && paletteConvProgram)
|
||||||
|
{
|
||||||
|
glBindVertexArray(mainVao);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, mainVbos[1]);
|
||||||
|
GLfloat texCoordPal[] = {
|
||||||
|
0.0f, 0.0f,
|
||||||
|
0.0f, scale_h,
|
||||||
|
scale_w, scale_h,
|
||||||
|
scale_w, 0.0f,
|
||||||
|
};
|
||||||
|
glBufferData(GL_ARRAY_BUFFER, sizeof(texCoordPal), texCoordPal, GL_STATIC_DRAW);
|
||||||
|
glVertexAttribPointer(mainTexCoordAttrLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
|
||||||
|
glEnableVertexAttribArray(mainTexCoordAttrLoc);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
|
glBindVertexArray(0);
|
||||||
|
|
||||||
|
glBindVertexArray(scaleVao);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, scaleVbos[1]);
|
||||||
|
GLfloat texCoord[] = {
|
||||||
|
0.0f, 0.0f,
|
||||||
|
scale_w, 0.0f,
|
||||||
|
scale_w, scale_h,
|
||||||
|
0.0f, scale_h,
|
||||||
|
};
|
||||||
|
glBufferData(GL_ARRAY_BUFFER, sizeof(texCoord), texCoord, GL_STATIC_DRAW);
|
||||||
|
glVertexAttribPointer(scaleTexCoordAttrLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
|
||||||
|
glEnableVertexAttribArray(scaleTexCoordAttrLoc);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
|
glBindVertexArray(0);
|
||||||
|
}
|
||||||
|
else if (gotOpenglV3 && paletteConvProgram)
|
||||||
|
{
|
||||||
|
glBindVertexArray(mainVao);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, mainVbos[1]);
|
||||||
|
GLfloat texCoord[] = {
|
||||||
|
0.0f, 0.0f,
|
||||||
|
scale_w, 0.0f,
|
||||||
|
scale_w, scale_h,
|
||||||
|
0.0f, scale_h,
|
||||||
|
};
|
||||||
|
glBufferData(GL_ARRAY_BUFFER, sizeof(texCoord), texCoord, GL_STATIC_DRAW);
|
||||||
|
glVertexAttribPointer(mainTexCoordAttrLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
|
||||||
|
glEnableVertexAttribArray(mainTexCoordAttrLoc);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
|
glBindVertexArray(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (paletteConvProgram)
|
if (paletteConvProgram)
|
||||||
{
|
{
|
||||||
glUseProgram(paletteConvProgram);
|
glUseProgram(paletteConvProgram);
|
||||||
@ -587,7 +587,7 @@ DWORD WINAPI render_main(void)
|
|||||||
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0);
|
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0);
|
||||||
glBindVertexArray(0);
|
glBindVertexArray(0);
|
||||||
}
|
}
|
||||||
else if (got30 && paletteConvProgram)
|
else if (gotOpenglV3 && paletteConvProgram)
|
||||||
{
|
{
|
||||||
glBindVertexArray(mainVao);
|
glBindVertexArray(mainVao);
|
||||||
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0);
|
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0);
|
||||||
@ -649,7 +649,7 @@ DWORD WINAPI render_main(void)
|
|||||||
glDeleteProgram(scaleProgram);
|
glDeleteProgram(scaleProgram);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (got30)
|
if (gotOpenglV3)
|
||||||
{
|
{
|
||||||
if (paletteConvProgram)
|
if (paletteConvProgram)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user