gl4: remove GLES usage

This commit is contained in:
Denis Pauk 2023-12-21 19:24:14 +02:00
parent fc543be4f5
commit 45413644bf
5 changed files with 7 additions and 106 deletions

View File

@ -35,11 +35,7 @@
#define DG_DYNARR_IMPLEMENTATION
#include "../files/DG_dynarr.h"
#ifdef YQ2_GL3_GLES3
#define REF_VERSION "Yamagi Quake II OpenGL ES3 Refresher"
#else
#define REF_VERSION "Yamagi Quake II OpenGL4 Refresher"
#endif
#define REF_VERSION "Yamagi Quake II OpenGL4 Refresher"
refimport_t ri;
@ -1006,15 +1002,7 @@ GL4_DrawParticles(void)
glDepthMask(GL_FALSE);
glEnable(GL_BLEND);
#ifdef YQ2_GL3_GLES
// the RPi4 GLES3 implementation doesn't draw particles if culling is
// enabled (at least with GL_FRONT which seems to be default in q2?)
glDisable(GL_CULL_FACE);
#else
// GLES doesn't have this, maybe it's always enabled? (https://gamedev.stackexchange.com/a/15528 says it works)
// luckily we don't use glPointSize() but set gl_PointSize in shader anyway
glEnable(GL_PROGRAM_POINT_SIZE);
#endif
GL4_UseProgram(gl4state.siParticle.shaderProgram);
@ -1041,12 +1029,8 @@ GL4_DrawParticles(void)
glDisable(GL_BLEND);
glDepthMask(GL_TRUE);
#ifdef YQ2_GL3_GLES
if(r_cull->value != 0.0f)
glEnable(GL_CULL_FACE);
#else
glDisable(GL_PROGRAM_POINT_SIZE);
#endif
YQ2_VLAFREE(buf);
}
@ -1880,12 +1864,6 @@ GL4_BeginFrame(float camera_separation)
{
gl_drawbuffer->modified = false;
#ifdef YQ2_GL3_GLES
// OpenGL ES3 only supports GL_NONE, GL_BACK and GL_COLOR_ATTACHMENT*
// so this doesn't make sense here, see https://docs.gl/es3/glDrawBuffers
R_Printf(PRINT_ALL, "NOTE: gl_drawbuffer not supported by OpenGL ES!\n");
#else // Desktop GL
// TODO: stereo stuff
//if ((gl4state.camera_separation == 0) || gl4state.stereo_mode != STEREO_MODE_OPENGL)
{
@ -1896,7 +1874,6 @@ GL4_BeginFrame(float camera_separation)
}
glDrawBuffer(drawBuffer);
}
#endif
}
/* texturemode stuff */

View File

@ -34,22 +34,15 @@ void
GL4_SetDefaultState(void)
{
glClearColor(1, 0, 0.5, 0.5);
#ifndef YQ2_GL3_GLES
// in GLES this is only supported with an extension:
// https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_multisample_compatibility.txt
// but apparently it's just enabled by default if set in the context?
glDisable(GL_MULTISAMPLE);
#endif
glCullFace(GL_FRONT);
glDisable(GL_DEPTH_TEST);
glDisable(GL_CULL_FACE);
glDisable(GL_BLEND);
#ifndef YQ2_GL3_GLES
// in GLES GL_FILL is the only supported mode
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
#endif
// TODO: gl1_texturealphamode?
GL4_TextureMode(gl_texturemode->string);
@ -64,13 +57,10 @@ GL4_SetDefaultState(void)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
#ifndef YQ2_GL3_GLES // see above
if (gl_msaa_samples->value)
{
glEnable(GL_MULTISAMPLE);
// glHint(GL_MULTISAMPLE_FILTER_HINT_NV, GL_NICEST); TODO what is this for?
}
#endif
}
static byte dottexture[8][8] = {
@ -126,14 +116,7 @@ GL4_ScreenShot(void)
{
int w=vid.width, h=vid.height;
#ifdef YQ2_GL3_GLES
// My RPi4's GLES3 doesn't like GL_RGB, so use GL_RGBA with GLES
// TODO: we could convert the screenshot to RGB before writing
// so the resulting file is smaller
static const int comps = 4;
#else // Desktop GL
static const int comps = 3;
#endif
byte *buffer = malloc(w*h*comps);
if (!buffer)

View File

@ -57,12 +57,7 @@ DebugCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei le
switch (severity)
{
#ifdef YQ2_GL3_GLES
#define SVRCASE(X, STR) case GL_DEBUG_SEVERITY_ ## X ## _KHR : severityStr = STR; break;
#else // Desktop GL
#define SVRCASE(X, STR) case GL_DEBUG_SEVERITY_ ## X ## _ARB : severityStr = STR; break;
#endif
#define SVRCASE(X, STR) case GL_DEBUG_SEVERITY_ ## X ## _ARB : severityStr = STR; break;
case QGL_DEBUG_SEVERITY_NOTIFICATION: return;
SVRCASE(HIGH, "Severity: High")
SVRCASE(MEDIUM, "Severity: Medium")
@ -72,11 +67,7 @@ DebugCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei le
switch (source)
{
#ifdef YQ2_GL3_GLES
#define SRCCASE(X) case GL_DEBUG_SOURCE_ ## X ## _KHR: sourceStr = "Source: " #X; break;
#else
#define SRCCASE(X) case GL_DEBUG_SOURCE_ ## X ## _ARB: sourceStr = "Source: " #X; break;
#endif
#define SRCCASE(X) case GL_DEBUG_SOURCE_ ## X ## _ARB: sourceStr = "Source: " #X; break;
SRCCASE(API);
SRCCASE(WINDOW_SYSTEM);
SRCCASE(SHADER_COMPILER);
@ -88,11 +79,7 @@ DebugCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei le
switch(type)
{
#ifdef YQ2_GL3_GLES
#define TYPECASE(X) case GL_DEBUG_TYPE_ ## X ## _KHR: typeStr = "Type: " #X; break;
#else
#define TYPECASE(X) case GL_DEBUG_TYPE_ ## X ## _ARB: typeStr = "Type: " #X; break;
#endif
#define TYPECASE(X) case GL_DEBUG_TYPE_ ## X ## _ARB: typeStr = "Type: " #X; break;
TYPECASE(ERROR);
TYPECASE(DEPRECATED_BEHAVIOR);
TYPECASE(UNDEFINED_BEHAVIOR);
@ -228,22 +215,14 @@ int GL4_PrepareForWindow(void)
gl4config.stencil = false;
}
#ifdef YQ2_GL3_GLES3
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES);
#else // Desktop GL
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 4);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 6);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
#endif
// Set GL context flags.
int contextFlags = 0;
#ifndef YQ2_GL3_GLES // Desktop GL (at least RPi4 doesn't like this for GLES3)
contextFlags |= SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG;
#endif
if (gl4_debugcontext && gl4_debugcontext->value)
{
@ -344,21 +323,13 @@ int GL4_InitContext(void* win)
GL4_SetVsync();
// Load GL pointrs through GLAD and check context.
#ifdef YQ2_GL3_GLES
if( !gladLoadGLES2Loader(SDL_GL_GetProcAddress))
#else // Desktop GL
if( !gladLoadGLLoader(SDL_GL_GetProcAddress))
#endif
{
R_Printf(PRINT_ALL, "GL4_InitContext(): ERROR: loading OpenGL function pointers failed!\n");
return false;
}
#ifdef YQ2_GL3_GLES3
else if (GLVersion.major < 3)
#else // Desktop GL
else if (GLVersion.major < 4 || (GLVersion.major == 4 && GLVersion.minor < 6))
#endif
{
R_Printf(PRINT_ALL, "GL4_InitContext(): ERROR: glad only got GL version %d.%d!\n", GLVersion.major, GLVersion.minor);
@ -369,11 +340,7 @@ int GL4_InitContext(void* win)
R_Printf(PRINT_ALL, "Successfully loaded OpenGL function pointers using glad, got version %d.%d!\n", GLVersion.major, GLVersion.minor);
}
#ifdef YQ2_GL3_GLES
gl4config.debug_output = GLAD_GL_KHR_debug != 0;
#else // Desktop GL
gl4config.debug_output = GLAD_GL_ARB_debug_output != 0;
#endif
gl4config.anisotropic = GLAD_GL_ARB_texture_filter_anisotropic != 0;
gl4config.major_version = GLVersion.major;
@ -382,25 +349,13 @@ int GL4_InitContext(void* win)
// Debug context setup.
if (gl4_debugcontext && gl4_debugcontext->value && gl4config.debug_output)
{
#ifdef YQ2_GL3_GLES
glDebugMessageCallbackKHR(DebugCallback, NULL);
// Call GL3_DebugCallback() synchronously, i.e. directly when and
// where the error happens (so we can get the cause in a backtrace)
glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR);
#else // Desktop GL
glDebugMessageCallbackARB(DebugCallback, NULL);
glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB);
#endif
}
// Window title - set here so we can display renderer name in it.
char title[40] = {0};
#ifdef YQ2_GL3_GLES3
snprintf(title, sizeof(title), "Yamagi Quake II %s - OpenGL ES 3.0", YQ2VERSION);
#else
snprintf(title, sizeof(title), "Yamagi Quake II %s - OpenGL 4.6", YQ2VERSION);
#endif
SDL_SetWindowTitle(window, title);
#if SDL_VERSION_ATLEAST(2, 26, 0)

View File

@ -36,11 +36,7 @@ CompileShader(GLenum shaderType, const char* shaderSrc, const char* shaderSrc2)
{
GLuint shader = glCreateShader(shaderType);
#ifdef YQ2_GL3_GLES3
const char* version = "#version 300 es\nprecision mediump float;\n";
#else // Desktop GL
const char* version = "#version 460\n";
#endif
const char* sources[3] = { version, shaderSrc, shaderSrc2 };
int numSources = shaderSrc2 != NULL ? 3 : 2;

View File

@ -34,23 +34,13 @@
// using system headers for their parsers/indexers but glad for real build
// (in glad glFoo is just a #define to glad_glFoo or sth, which screws up autocompletion)
// (you may have to configure your IDE to #define IN_IDE_PARSER, but not for building!)
#ifdef YQ2_GL3_GLES3
#include <GLES3/gl32.h>
#else // desktop GL4
#define GL_GLEXT_PROTOTYPES 1
#include <GL/gl.h>
#include <GL/glext.h>
#endif
#else
#ifdef YQ2_GL3_GLES3
#include "../glad-gles3/include/glad/glad.h"
// yes, this is a bit hacky, but it works :-P
#define glDepthRange glDepthRangef
#else // desktop GL4
#include "../glad/include/glad/glad.h"
#endif
#include "../glad/include/glad/glad.h"
#endif