1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-25 01:57:47 +01:00

use POT textures with up to 4096*4096 of size

This commit is contained in:
FunkyFr3sh 2018-05-13 11:15:22 +02:00
parent 6a2ab6378d
commit fd4a893729
2 changed files with 27 additions and 16 deletions

View File

@ -1,6 +1,12 @@
#define vstr(v) vxstr(v)
#define vxstr(a,b,c,d) str(a##.##b##.##c##.##d)
#define str(s) #s
#define VERSION 1,1,6,4
1 VERSIONINFO 1 VERSIONINFO
FILEVERSION 1,1,6,3 FILEVERSION VERSION
PRODUCTVERSION 1,1,6,3 PRODUCTVERSION VERSION
{ {
BLOCK "StringFileInfo" BLOCK "StringFileInfo"
{ {
@ -8,13 +14,13 @@ PRODUCTVERSION 1,1,6,3
{ {
VALUE "CompanyName", "cncnet.org" VALUE "CompanyName", "cncnet.org"
VALUE "FileDescription", "DirectDraw replacement for C&C95 and Red Alert" VALUE "FileDescription", "DirectDraw replacement for C&C95 and Red Alert"
VALUE "FileVersion", "1.1.6.3" VALUE "FileVersion", vstr(VERSION)
VALUE "InternalName", "ddraw" VALUE "InternalName", "ddraw"
VALUE "LegalCopyright", "Copyright (c) 2010-2018" VALUE "LegalCopyright", "Copyright (c) 2010-2018"
VALUE "LegalTrademarks", "" VALUE "LegalTrademarks", ""
VALUE "OriginalFileName", "ddraw.dll" VALUE "OriginalFileName", "ddraw.dll"
VALUE "ProductName", "DirectDraw replacement for C&C95 and Red Alert" VALUE "ProductName", "DirectDraw replacement for C&C95 and Red Alert"
VALUE "ProductVersion", "1.1.6.3" VALUE "ProductVersion", vstr(VERSION)
VALUE "Comments", "https://cncnet.org" VALUE "Comments", "https://cncnet.org"
} }
} }

View File

@ -86,8 +86,13 @@ DWORD WINAPI render_main(void)
if (ddraw->render.maxfps > 0) if (ddraw->render.maxfps > 0)
frame_len = 1000.0f / ddraw->render.maxfps; frame_len = 1000.0f / ddraw->render.maxfps;
int tex_width = ddraw->width <= 512 ? 512 : ddraw->width <= 1024 ? 1024 : ddraw->width > 2048 ? ddraw->width : 2048; int tex_width =
int tex_height = ddraw->height > tex_width ? ddraw->height : tex_width; ddraw->width <= 1024 ? 1024 : ddraw->width <= 2048 ? 2048 : ddraw->width <= 4096 ? 4096 : ddraw->width;
int tex_height =
ddraw->height <= tex_width ? tex_width : ddraw->height <= 2048 ? 2048 : ddraw->height <= 4096 ? 4096 : ddraw->height;
tex_width = tex_width > tex_height ? tex_width : tex_height;
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);
@ -138,22 +143,22 @@ DWORD WINAPI render_main(void)
while (glGetError() != GL_NO_ERROR); while (glGetError() != GL_NO_ERROR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 256, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
if (glGetError() != GL_NO_ERROR) if (glGetError() != GL_NO_ERROR)
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 256, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
glViewport( glViewport(
ddraw->render.viewport.x, ddraw->render.viewport.y, ddraw->render.viewport.x, ddraw->render.viewport.y,
ddraw->render.viewport.width, ddraw->render.viewport.height); ddraw->render.viewport.width, ddraw->render.viewport.height);
GLint surfaceUniLoc = 0, paletteUniLoc = 0; GLint surfaceUniLoc = -1, paletteUniLoc = -1;
if (paletteConvProgram) if (paletteConvProgram)
{ {
surfaceUniLoc = glGetUniformLocation(paletteConvProgram, "SurfaceTex"); surfaceUniLoc = glGetUniformLocation(paletteConvProgram, "SurfaceTex");
paletteUniLoc = glGetUniformLocation(paletteConvProgram, "PaletteTex"); paletteUniLoc = glGetUniformLocation(paletteConvProgram, "PaletteTex");
} }
GLint textureUniLoc = -1, texCoordUniLoc = -1, frameCountUniLoc = -1; GLint textureUniLoc = -1, texCoordAttrLoc = -1, frameCountUniLoc = -1;
GLuint frameBufferId = 0; GLuint frameBufferId = 0;
GLuint frameBufferTexId = 0; GLuint frameBufferTexId = 0;
GLuint vboBuffers[3]; GLuint vboBuffers[3];
@ -162,8 +167,8 @@ DWORD WINAPI render_main(void)
{ {
glUseProgram(scaleProgram); glUseProgram(scaleProgram);
GLint vertexCoordUniLoc = glGetAttribLocation(scaleProgram, "VertexCoord"); GLint vertexCoordAttrLoc = glGetAttribLocation(scaleProgram, "VertexCoord");
texCoordUniLoc = glGetAttribLocation(scaleProgram, "TexCoord"); texCoordAttrLoc = glGetAttribLocation(scaleProgram, "TexCoord");
textureUniLoc = glGetUniformLocation(scaleProgram, "Texture"); textureUniLoc = glGetUniformLocation(scaleProgram, "Texture");
frameCountUniLoc = glGetUniformLocation(scaleProgram, "FrameCount"); frameCountUniLoc = glGetUniformLocation(scaleProgram, "FrameCount");
@ -177,8 +182,8 @@ DWORD WINAPI render_main(void)
-1.0f,-1.0f, -1.0f,-1.0f,
}; };
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexCoord), vertexCoord, GL_STATIC_DRAW); glBufferData(GL_ARRAY_BUFFER, sizeof(vertexCoord), vertexCoord, GL_STATIC_DRAW);
glVertexAttribPointer(vertexCoordUniLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); glVertexAttribPointer(vertexCoordAttrLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
glEnableVertexAttribArray(vertexCoordUniLoc); glEnableVertexAttribArray(vertexCoordAttrLoc);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboBuffers[2]); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboBuffers[2]);
static const GLushort indices[] = static const GLushort indices[] =
@ -378,8 +383,8 @@ DWORD WINAPI render_main(void)
}; };
glBufferData(GL_ARRAY_BUFFER, sizeof(texCoord), texCoord, GL_STATIC_DRAW); glBufferData(GL_ARRAY_BUFFER, sizeof(texCoord), texCoord, GL_STATIC_DRAW);
glVertexAttribPointer(texCoordUniLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); glVertexAttribPointer(texCoordAttrLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
glEnableVertexAttribArray(texCoordUniLoc); glEnableVertexAttribArray(texCoordAttrLoc);
glBindBuffer(GL_ARRAY_BUFFER, 0); glBindBuffer(GL_ARRAY_BUFFER, 0);