1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-14 22:03:27 +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
FILEVERSION 1,1,6,3
PRODUCTVERSION 1,1,6,3
FILEVERSION VERSION
PRODUCTVERSION VERSION
{
BLOCK "StringFileInfo"
{
@ -8,13 +14,13 @@ PRODUCTVERSION 1,1,6,3
{
VALUE "CompanyName", "cncnet.org"
VALUE "FileDescription", "DirectDraw replacement for C&C95 and Red Alert"
VALUE "FileVersion", "1.1.6.3"
VALUE "FileVersion", vstr(VERSION)
VALUE "InternalName", "ddraw"
VALUE "LegalCopyright", "Copyright (c) 2010-2018"
VALUE "LegalTrademarks", ""
VALUE "OriginalFileName", "ddraw.dll"
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"
}
}

View File

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