mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-25 01:57:47 +01:00
avoid deprecated functions if possible
This commit is contained in:
parent
07182e2055
commit
d36d432c1a
@ -31,6 +31,7 @@
|
|||||||
<ClInclude Include="inc\main.h" />
|
<ClInclude Include="inc\main.h" />
|
||||||
<ClInclude Include="inc\opengl.h" />
|
<ClInclude Include="inc\opengl.h" />
|
||||||
<ClInclude Include="inc\palette.h" />
|
<ClInclude Include="inc\palette.h" />
|
||||||
|
<ClInclude Include="inc\paletteshader.h" />
|
||||||
<ClInclude Include="inc\png.h" />
|
<ClInclude Include="inc\png.h" />
|
||||||
<ClInclude Include="inc\pngconf.h" />
|
<ClInclude Include="inc\pngconf.h" />
|
||||||
<ClInclude Include="inc\surface.h" />
|
<ClInclude Include="inc\surface.h" />
|
||||||
|
@ -86,6 +86,9 @@
|
|||||||
<ClInclude Include="inc\opengl.h">
|
<ClInclude Include="inc\opengl.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="inc\paletteshader.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="ddraw.rc">
|
<ResourceCompile Include="ddraw.rc">
|
||||||
|
@ -54,6 +54,9 @@ extern PFNGLBINDBUFFERPROC glBindBuffer;
|
|||||||
extern PFNGLBUFFERDATAPROC glBufferData;
|
extern PFNGLBUFFERDATAPROC glBufferData;
|
||||||
extern PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer;
|
extern PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer;
|
||||||
extern PFNGLDELETEBUFFERSPROC glDeleteBuffers;
|
extern PFNGLDELETEBUFFERSPROC glDeleteBuffers;
|
||||||
|
extern PFNGLGENVERTEXARRAYSPROC glGenVertexArrays;
|
||||||
|
extern PFNGLBINDVERTEXARRAYPROC glBindVertexArray;
|
||||||
|
extern PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays;
|
||||||
|
|
||||||
extern PFNGLACTIVETEXTUREPROC glActiveTexture;
|
extern PFNGLACTIVETEXTUREPROC glActiveTexture;
|
||||||
|
|
||||||
|
99
inc/paletteshader.h
Normal file
99
inc/paletteshader.h
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
// old
|
||||||
|
|
||||||
|
const GLchar *PassthroughVertShader110Src =
|
||||||
|
"#version 110\n"
|
||||||
|
"varying vec2 TexCoord0; \n"
|
||||||
|
"\n"
|
||||||
|
"void main(void)\n"
|
||||||
|
"{\n"
|
||||||
|
" gl_Position = ftransform(); \n"
|
||||||
|
" TexCoord0 = gl_MultiTexCoord0.xy; \n"
|
||||||
|
"}\n";
|
||||||
|
|
||||||
|
const GLchar *PaletteFragShader110Src =
|
||||||
|
"#version 110\n"
|
||||||
|
"uniform sampler2D PaletteTex; \n"
|
||||||
|
"uniform sampler2D SurfaceTex; \n"
|
||||||
|
"varying vec2 TexCoord0; \n"
|
||||||
|
"\n"
|
||||||
|
"void main()\n"
|
||||||
|
"{\n"
|
||||||
|
" vec4 index = texture2D(SurfaceTex, TexCoord0); \n"
|
||||||
|
" vec4 texel = texture2D(PaletteTex, index.xy); \n"
|
||||||
|
" gl_FragColor = texel;\n"
|
||||||
|
"}\n";
|
||||||
|
|
||||||
|
|
||||||
|
// new
|
||||||
|
|
||||||
|
const GLchar *PassthroughVertShaderSrc =
|
||||||
|
"#if __VERSION__ >= 130\n"
|
||||||
|
"#define COMPAT_VARYING out\n"
|
||||||
|
"#define COMPAT_ATTRIBUTE in\n"
|
||||||
|
"#define COMPAT_TEXTURE texture\n"
|
||||||
|
"#else\n"
|
||||||
|
"#define COMPAT_VARYING varying \n"
|
||||||
|
"#define COMPAT_ATTRIBUTE attribute \n"
|
||||||
|
"#define COMPAT_TEXTURE texture2D\n"
|
||||||
|
"#endif\n"
|
||||||
|
"\n"
|
||||||
|
"#ifdef GL_ES\n"
|
||||||
|
"#define COMPAT_PRECISION mediump\n"
|
||||||
|
"#else\n"
|
||||||
|
"#define COMPAT_PRECISION\n"
|
||||||
|
"#endif\n"
|
||||||
|
"\n"
|
||||||
|
"COMPAT_ATTRIBUTE vec4 VertexCoord;\n"
|
||||||
|
"COMPAT_ATTRIBUTE vec4 COLOR;\n"
|
||||||
|
"COMPAT_ATTRIBUTE vec4 TexCoord;\n"
|
||||||
|
"COMPAT_VARYING vec4 COL0;\n"
|
||||||
|
"COMPAT_VARYING vec4 TEX0;\n"
|
||||||
|
"\n"
|
||||||
|
"vec4 _oPosition1; \n"
|
||||||
|
"uniform mat4 MVPMatrix;\n"
|
||||||
|
"\n"
|
||||||
|
"void main()\n"
|
||||||
|
"{\n"
|
||||||
|
" vec4 _oColor;\n"
|
||||||
|
" vec2 _otexCoord;\n"
|
||||||
|
" gl_Position = VertexCoord.x * MVPMatrix[0] + VertexCoord.y * MVPMatrix[1] + VertexCoord.z * MVPMatrix[2] + VertexCoord.w * MVPMatrix[3];\n"
|
||||||
|
" _oPosition1 = gl_Position;\n"
|
||||||
|
" _oColor = COLOR;\n"
|
||||||
|
" _otexCoord = TexCoord.xy;\n"
|
||||||
|
" COL0 = COLOR;\n"
|
||||||
|
" TEX0.xy = TexCoord.xy;\n"
|
||||||
|
"}\n";
|
||||||
|
|
||||||
|
|
||||||
|
const GLchar *PaletteFragShaderSrc =
|
||||||
|
"#if __VERSION__ >= 130\n"
|
||||||
|
"#define COMPAT_VARYING in\n"
|
||||||
|
"#define COMPAT_TEXTURE texture\n"
|
||||||
|
"out vec4 FragColor;\n"
|
||||||
|
"#else\n"
|
||||||
|
"#define COMPAT_VARYING varying\n"
|
||||||
|
"#define FragColor gl_FragColor\n"
|
||||||
|
"#define COMPAT_TEXTURE texture2D\n"
|
||||||
|
"#endif\n"
|
||||||
|
"\n"
|
||||||
|
"#ifdef GL_ES\n"
|
||||||
|
"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
|
||||||
|
"precision highp float;\n"
|
||||||
|
"#else\n"
|
||||||
|
"precision mediump float;\n"
|
||||||
|
"#endif\n"
|
||||||
|
"#define COMPAT_PRECISION mediump\n"
|
||||||
|
"#else\n"
|
||||||
|
"#define COMPAT_PRECISION\n"
|
||||||
|
"#endif\n"
|
||||||
|
"\n"
|
||||||
|
"uniform sampler2D PaletteTex;\n"
|
||||||
|
"uniform sampler2D SurfaceTex;\n"
|
||||||
|
"COMPAT_VARYING vec4 TEX0;\n"
|
||||||
|
"\n"
|
||||||
|
"void main()\n"
|
||||||
|
"{\n"
|
||||||
|
" vec4 index = COMPAT_TEXTURE(SurfaceTex, TEX0.xy);\n"
|
||||||
|
" vec4 texel = COMPAT_TEXTURE(PaletteTex, index.xy);\n"
|
||||||
|
" FragColor = texel;\n"
|
||||||
|
"}\n";
|
@ -49,6 +49,9 @@ PFNGLBINDBUFFERPROC glBindBuffer = NULL;
|
|||||||
PFNGLBUFFERDATAPROC glBufferData = NULL;
|
PFNGLBUFFERDATAPROC glBufferData = NULL;
|
||||||
PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer = NULL;
|
PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer = NULL;
|
||||||
PFNGLDELETEBUFFERSPROC glDeleteBuffers = NULL;
|
PFNGLDELETEBUFFERSPROC glDeleteBuffers = NULL;
|
||||||
|
PFNGLGENVERTEXARRAYSPROC glGenVertexArrays = NULL;
|
||||||
|
PFNGLBINDVERTEXARRAYPROC glBindVertexArray = NULL;
|
||||||
|
PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays = NULL;
|
||||||
|
|
||||||
PFNGLACTIVETEXTUREPROC glActiveTexture = NULL;
|
PFNGLACTIVETEXTUREPROC glActiveTexture = NULL;
|
||||||
|
|
||||||
@ -105,6 +108,9 @@ void OpenGL_Init()
|
|||||||
glBufferData = (PFNGLBUFFERDATAPROC)wglGetProcAddress("glBufferData");
|
glBufferData = (PFNGLBUFFERDATAPROC)wglGetProcAddress("glBufferData");
|
||||||
glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC)wglGetProcAddress("glVertexAttribPointer");
|
glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC)wglGetProcAddress("glVertexAttribPointer");
|
||||||
glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)wglGetProcAddress("glDeleteBuffers");
|
glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)wglGetProcAddress("glDeleteBuffers");
|
||||||
|
glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC)wglGetProcAddress("glGenVertexArrays");
|
||||||
|
glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC)wglGetProcAddress("glBindVertexArray");
|
||||||
|
glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC)wglGetProcAddress("glDeleteVertexArrays");
|
||||||
|
|
||||||
glActiveTexture = (PFNGLACTIVETEXTUREPROC)wglGetProcAddress("glActiveTexture");
|
glActiveTexture = (PFNGLACTIVETEXTUREPROC)wglGetProcAddress("glActiveTexture");
|
||||||
|
|
||||||
|
233
src/render.c
233
src/render.c
@ -20,29 +20,7 @@
|
|||||||
#include "opengl.h"
|
#include "opengl.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "surface.h"
|
#include "surface.h"
|
||||||
|
#include "paletteshader.h"
|
||||||
const GLchar *PassthroughVertShaderSrc =
|
|
||||||
"#version 110\n"
|
|
||||||
"varying vec2 TexCoord0; \n"
|
|
||||||
"\n"
|
|
||||||
"void main(void)\n"
|
|
||||||
"{\n"
|
|
||||||
" gl_Position = ftransform(); \n"
|
|
||||||
" TexCoord0 = gl_MultiTexCoord0.xy; \n"
|
|
||||||
"}\n";
|
|
||||||
|
|
||||||
const GLchar *PaletteFragShaderSrc =
|
|
||||||
"#version 110\n"
|
|
||||||
"uniform sampler2D PaletteTex; \n"
|
|
||||||
"uniform sampler2D SurfaceTex; \n"
|
|
||||||
"varying vec2 TexCoord0; \n"
|
|
||||||
"\n"
|
|
||||||
"void main()\n"
|
|
||||||
"{\n"
|
|
||||||
" vec4 index = texture2D(SurfaceTex, TexCoord0); \n"
|
|
||||||
" vec4 texel = texture2D(PaletteTex, index.xy); \n"
|
|
||||||
" gl_FragColor = texel;\n"
|
|
||||||
"}\n";
|
|
||||||
|
|
||||||
|
|
||||||
BOOL detect_cutscene();
|
BOOL detect_cutscene();
|
||||||
@ -108,15 +86,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);
|
||||||
|
|
||||||
GLuint paletteConvProgram = 0;
|
BOOL got30 = glGenFramebuffers && glBindFramebuffer && glFramebufferTexture2D && glDrawBuffers &&
|
||||||
if (glGetUniformLocation && glActiveTexture && glUniform1i)
|
|
||||||
paletteConvProgram = OpenGL_BuildProgram(PassthroughVertShaderSrc, PaletteFragShaderSrc);
|
|
||||||
|
|
||||||
GLuint scaleProgram = 0;
|
|
||||||
if (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)
|
glEnableVertexAttribArray && glUniform2fv && glUniformMatrix4fv && glGenVertexArrays && glBindVertexArray;
|
||||||
|
|
||||||
|
BOOL got20 = glGetUniformLocation && glActiveTexture && glUniform1i;
|
||||||
|
|
||||||
|
GLuint paletteConvProgram = 0;
|
||||||
|
if (got30)
|
||||||
|
paletteConvProgram = OpenGL_BuildProgram(PassthroughVertShaderSrc, PaletteFragShaderSrc);
|
||||||
|
else if (got20)
|
||||||
|
paletteConvProgram = OpenGL_BuildProgram(PassthroughVertShader110Src, PaletteFragShader110Src);
|
||||||
|
|
||||||
|
GLuint scaleProgram = 0;
|
||||||
|
if (got30)
|
||||||
scaleProgram = OpenGL_BuildProgramFromFile(ddraw->shader);
|
scaleProgram = OpenGL_BuildProgramFromFile(ddraw->shader);
|
||||||
|
|
||||||
// primary surface texture
|
// primary surface texture
|
||||||
@ -158,30 +142,96 @@ DWORD WINAPI render_main(void)
|
|||||||
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 = -1, paletteUniLoc = -1;
|
|
||||||
|
GLint surfaceUniLoc = -1, paletteUniLoc = -1, mainTexCoordAttrLoc = -1;
|
||||||
|
GLuint mainVbos[3], mainVao;
|
||||||
if (paletteConvProgram)
|
if (paletteConvProgram)
|
||||||
{
|
{
|
||||||
surfaceUniLoc = glGetUniformLocation(paletteConvProgram, "SurfaceTex");
|
surfaceUniLoc = glGetUniformLocation(paletteConvProgram, "SurfaceTex");
|
||||||
paletteUniLoc = glGetUniformLocation(paletteConvProgram, "PaletteTex");
|
paletteUniLoc = glGetUniformLocation(paletteConvProgram, "PaletteTex");
|
||||||
|
|
||||||
|
if (got30)
|
||||||
|
{
|
||||||
|
glUseProgram(paletteConvProgram);
|
||||||
|
|
||||||
|
GLint vertexCoordAttrLoc = glGetAttribLocation(paletteConvProgram, "VertexCoord");
|
||||||
|
mainTexCoordAttrLoc = glGetAttribLocation(paletteConvProgram, "TexCoord");
|
||||||
|
|
||||||
|
glGenBuffers(3, mainVbos);
|
||||||
|
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, mainVbos[0]);
|
||||||
|
if (scaleProgram)
|
||||||
|
{
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, mainVbos[0]);
|
||||||
|
static const GLfloat vertexCoordPal[] = {
|
||||||
|
-1.0f, -1.0f,
|
||||||
|
-1.0f, 1.0f,
|
||||||
|
1.0f, 1.0f,
|
||||||
|
1.0f, -1.0f,
|
||||||
|
};
|
||||||
|
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexCoordPal), vertexCoordPal, GL_STATIC_DRAW);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
static const GLfloat vertexCoord[] = {
|
||||||
|
-1.0f, 1.0f,
|
||||||
|
1.0f, 1.0f,
|
||||||
|
1.0f,-1.0f,
|
||||||
|
-1.0f,-1.0f,
|
||||||
|
};
|
||||||
|
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexCoord), vertexCoord, GL_STATIC_DRAW);
|
||||||
|
}
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
|
|
||||||
|
glGenVertexArrays(1, &mainVao);
|
||||||
|
glBindVertexArray(mainVao);
|
||||||
|
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, mainVbos[0]);
|
||||||
|
glVertexAttribPointer(vertexCoordAttrLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
|
||||||
|
glEnableVertexAttribArray(vertexCoordAttrLoc);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
|
|
||||||
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mainVbos[2]);
|
||||||
|
static const GLushort indices[] =
|
||||||
|
{
|
||||||
|
0, 1, 2,
|
||||||
|
0, 2, 3,
|
||||||
|
};
|
||||||
|
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
|
||||||
|
|
||||||
|
glBindVertexArray(0);
|
||||||
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||||
|
|
||||||
|
glUniform4f(glGetAttribLocation(paletteConvProgram, "Color"), 1, 1, 1, 1);
|
||||||
|
|
||||||
|
const float mvpMatrix[16] = {
|
||||||
|
1,0,0,0,
|
||||||
|
0,1,0,0,
|
||||||
|
0,0,1,0,
|
||||||
|
0,0,0,1,
|
||||||
|
};
|
||||||
|
glUniformMatrix4fv(glGetUniformLocation(paletteConvProgram, "MVPMatrix"), 1, GL_FALSE, mvpMatrix);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
GLint textureUniLoc = -1, texCoordAttrLoc = -1, frameCountUniLoc = -1;
|
GLint textureUniLoc = -1, scaleTexCoordAttrLoc = -1, frameCountUniLoc = -1;
|
||||||
GLuint frameBufferId = 0;
|
GLuint frameBufferId = 0;
|
||||||
GLuint frameBufferTexId = 0;
|
GLuint frameBufferTexId = 0;
|
||||||
GLuint vboBuffers[3];
|
GLuint scaleVbos[3], scaleVao;
|
||||||
|
|
||||||
if (scaleProgram)
|
if (scaleProgram)
|
||||||
{
|
{
|
||||||
glUseProgram(scaleProgram);
|
glUseProgram(scaleProgram);
|
||||||
|
|
||||||
GLint vertexCoordAttrLoc = glGetAttribLocation(scaleProgram, "VertexCoord");
|
GLint vertexCoordAttrLoc = glGetAttribLocation(scaleProgram, "VertexCoord");
|
||||||
texCoordAttrLoc = glGetAttribLocation(scaleProgram, "TexCoord");
|
scaleTexCoordAttrLoc = glGetAttribLocation(scaleProgram, "TexCoord");
|
||||||
textureUniLoc = glGetUniformLocation(scaleProgram, "Texture");
|
textureUniLoc = glGetUniformLocation(scaleProgram, "Texture");
|
||||||
frameCountUniLoc = glGetUniformLocation(scaleProgram, "FrameCount");
|
frameCountUniLoc = glGetUniformLocation(scaleProgram, "FrameCount");
|
||||||
|
|
||||||
glGenBuffers(3, vboBuffers);
|
glGenBuffers(3, scaleVbos);
|
||||||
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, vboBuffers[0]);
|
glBindBuffer(GL_ARRAY_BUFFER, scaleVbos[0]);
|
||||||
static const GLfloat vertexCoord[] = {
|
static const GLfloat vertexCoord[] = {
|
||||||
-1.0f, 1.0f,
|
-1.0f, 1.0f,
|
||||||
1.0f, 1.0f,
|
1.0f, 1.0f,
|
||||||
@ -189,10 +239,17 @@ 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);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
|
|
||||||
|
glGenVertexArrays(1, &scaleVao);
|
||||||
|
glBindVertexArray(scaleVao);
|
||||||
|
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, scaleVbos[0]);
|
||||||
glVertexAttribPointer(vertexCoordAttrLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
|
glVertexAttribPointer(vertexCoordAttrLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
|
||||||
glEnableVertexAttribArray(vertexCoordAttrLoc);
|
glEnableVertexAttribArray(vertexCoordAttrLoc);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
|
|
||||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboBuffers[2]);
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, scaleVbos[2]);
|
||||||
static const GLushort indices[] =
|
static const GLushort indices[] =
|
||||||
{
|
{
|
||||||
0, 1, 2,
|
0, 1, 2,
|
||||||
@ -200,7 +257,7 @@ DWORD WINAPI render_main(void)
|
|||||||
};
|
};
|
||||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
|
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
|
||||||
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
glBindVertexArray(0);
|
||||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||||
|
|
||||||
float inputSize[2], outputSize[2], textureSize[2];
|
float inputSize[2], outputSize[2], textureSize[2];
|
||||||
@ -254,7 +311,10 @@ DWORD WINAPI render_main(void)
|
|||||||
scaleProgram = 0;
|
scaleProgram = 0;
|
||||||
|
|
||||||
if (glDeleteBuffers)
|
if (glDeleteBuffers)
|
||||||
glDeleteBuffers(3, vboBuffers);
|
glDeleteBuffers(3, scaleVbos);
|
||||||
|
|
||||||
|
if (glDeleteVertexArrays)
|
||||||
|
glDeleteVertexArrays(1, &scaleVao);
|
||||||
}
|
}
|
||||||
|
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||||
@ -356,48 +416,63 @@ DWORD WINAPI render_main(void)
|
|||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (scaleProgram)
|
if (scaleProgram && paletteConvProgram)
|
||||||
{
|
{
|
||||||
// draw surface into framebuffer
|
// draw surface into framebuffer
|
||||||
|
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, frameBufferId);
|
|
||||||
|
|
||||||
glPushAttrib(GL_VIEWPORT_BIT);
|
|
||||||
glViewport(0, 0, ddraw->width, ddraw->height);
|
glViewport(0, 0, ddraw->width, ddraw->height);
|
||||||
|
|
||||||
glBegin(GL_TRIANGLE_FAN);
|
glBindVertexArray(mainVao);
|
||||||
glTexCoord2f(0, 0); glVertex2f(-1, -1);
|
|
||||||
glTexCoord2f(0, scale_h); glVertex2f(-1, 1);
|
glBindFramebuffer(GL_FRAMEBUFFER, frameBufferId);
|
||||||
glTexCoord2f(scale_w, scale_h); glVertex2f(1, 1);
|
|
||||||
glTexCoord2f(scale_w, 0); glVertex2f(1, -1);
|
glBindBuffer(GL_ARRAY_BUFFER, mainVbos[1]);
|
||||||
glEnd();
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0);
|
||||||
|
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||||
|
|
||||||
glPopAttrib();
|
glBindVertexArray(0);
|
||||||
|
|
||||||
|
glViewport(
|
||||||
|
ddraw->render.viewport.x, ddraw->render.viewport.y,
|
||||||
|
ddraw->render.viewport.width, ddraw->render.viewport.height);
|
||||||
|
|
||||||
glActiveTexture(GL_TEXTURE1);
|
glActiveTexture(GL_TEXTURE1);
|
||||||
glBindTexture(GL_TEXTURE_2D, 0);
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
|
|
||||||
// apply filter
|
// apply filter
|
||||||
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, vboBuffers[1]);
|
glUseProgram(scaleProgram);
|
||||||
|
|
||||||
|
glBindVertexArray(scaleVao);
|
||||||
|
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, scaleVbos[1]);
|
||||||
|
|
||||||
GLfloat texCoord[] = {
|
GLfloat texCoord[] = {
|
||||||
0.0f, 0.0f,
|
0.0f, 0.0f,
|
||||||
scale_w, 0.0f,
|
scale_w, 0.0f,
|
||||||
scale_w, scale_h,
|
scale_w, scale_h,
|
||||||
0, scale_h,
|
0.0f, scale_h,
|
||||||
};
|
};
|
||||||
|
|
||||||
glBufferData(GL_ARRAY_BUFFER, sizeof(texCoord), texCoord, GL_STATIC_DRAW);
|
glBufferData(GL_ARRAY_BUFFER, sizeof(texCoord), texCoord, GL_STATIC_DRAW);
|
||||||
glVertexAttribPointer(texCoordAttrLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
|
glVertexAttribPointer(scaleTexCoordAttrLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
|
||||||
glEnableVertexAttribArray(texCoordAttrLoc);
|
glEnableVertexAttribArray(scaleTexCoordAttrLoc);
|
||||||
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
|
|
||||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboBuffers[2]);
|
|
||||||
|
|
||||||
glUseProgram(scaleProgram);
|
|
||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
glEnable(GL_TEXTURE_2D);
|
glEnable(GL_TEXTURE_2D);
|
||||||
glBindTexture(GL_TEXTURE_2D, frameBufferTexId);
|
glBindTexture(GL_TEXTURE_2D, frameBufferTexId);
|
||||||
@ -409,7 +484,30 @@ DWORD WINAPI render_main(void)
|
|||||||
|
|
||||||
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0);
|
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0);
|
||||||
|
|
||||||
glBindBuffer(GL_ELEMENT_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);
|
||||||
|
|
||||||
|
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0);
|
||||||
|
|
||||||
|
glBindVertexArray(0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -449,10 +547,13 @@ DWORD WINAPI render_main(void)
|
|||||||
glDeleteTextures(1, &frameBufferTexId);
|
glDeleteTextures(1, &frameBufferTexId);
|
||||||
|
|
||||||
if (glDeleteBuffers)
|
if (glDeleteBuffers)
|
||||||
glDeleteBuffers(3, vboBuffers);
|
glDeleteBuffers(3, scaleVbos);
|
||||||
|
|
||||||
if (glDeleteFramebuffers)
|
if (glDeleteFramebuffers)
|
||||||
glDeleteFramebuffers(1, &frameBufferId);
|
glDeleteFramebuffers(1, &frameBufferId);
|
||||||
|
|
||||||
|
if (glDeleteVertexArrays)
|
||||||
|
glDeleteVertexArrays(1, &scaleVao);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (glDeleteProgram)
|
if (glDeleteProgram)
|
||||||
@ -463,6 +564,18 @@ DWORD WINAPI render_main(void)
|
|||||||
if (scaleProgram)
|
if (scaleProgram)
|
||||||
glDeleteProgram(scaleProgram);
|
glDeleteProgram(scaleProgram);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (got30)
|
||||||
|
{
|
||||||
|
if (paletteConvProgram)
|
||||||
|
{
|
||||||
|
if (glDeleteBuffers)
|
||||||
|
glDeleteBuffers(3, mainVbos);
|
||||||
|
|
||||||
|
if (glDeleteVertexArrays)
|
||||||
|
glDeleteVertexArrays(1, &mainVao);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
wglMakeCurrent(NULL, NULL);
|
wglMakeCurrent(NULL, NULL);
|
||||||
wglDeleteContext(hRC);
|
wglDeleteContext(hRC);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user