Update to various GLES files

This commit is contained in:
Emile Belanger 2021-02-21 18:25:28 +00:00
parent 4535c7141f
commit cf90671b21
8 changed files with 127 additions and 44 deletions

View file

@ -146,7 +146,10 @@ void OpenGLFrameBuffer::InitializeState()
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClearDepthf(1.0f);
if(glClearDepthf)
glClearDepthf(1.0f);
else
glClearDepth(1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
SetViewportRects(nullptr);

View file

@ -128,8 +128,9 @@ unsigned int FHardwareTexture::CreateTexture(unsigned char * buffer, int w, int
int sourcetype;
sourcetype = texformat = GL_RGBA;
sourcetype = GL_BGRA;
texformat = GL_RGBA;
glTexImage2D(GL_TEXTURE_2D, 0, texformat, rw, rh, 0, sourcetype, GL_UNSIGNED_BYTE, buffer);

View file

@ -424,15 +424,7 @@ namespace OpenGLESRenderer
if (multisample)
{
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D_MULTISAMPLE, colorbuffer0.handle, 0);
/*
if (colorbuffer1.handle != 0)
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_TEXTURE_2D_MULTISAMPLE, colorbuffer1.handle, 0);
if (colorbuffer2.handle != 0)
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT2, GL_TEXTURE_2D_MULTISAMPLE, colorbuffer2.handle, 0);
*/
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthstencil.handle);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, depthstencil.handle);
}
else
{
@ -502,7 +494,10 @@ namespace OpenGLESRenderer
glGetFloatv(GL_DEPTH_CLEAR_VALUE, &depthValue);
glDisable(GL_SCISSOR_TEST);
glClearColor(0.0, 0.0, 0.0, 0.0);
glClearDepthf(0.0);
if (glClearDepthf)
glClearDepthf(0.0f);
else
glClearDepth(0.0f);
glClearStencil(0);
GLenum flags = GL_COLOR_BUFFER_BIT;
if (stencil)
@ -511,7 +506,10 @@ namespace OpenGLESRenderer
flags |= GL_DEPTH_BUFFER_BIT;
glClear(flags);
glClearStencil(stencilValue);
glClearDepthf(depthValue);
if (glClearDepthf)
glClearDepthf(depthValue);
else
glClearDepth(depthValue);
if (scissorEnabled)
glEnable(GL_SCISSOR_TEST);
}
@ -693,10 +691,8 @@ namespace OpenGLESRenderer
void FGLRenderBuffers::BindSceneColorTexture(int index)
{
glActiveTexture(GL_TEXTURE0 + index);
if (mSamples > 1)
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, mSceneMultisampleTex.handle);
else
glBindTexture(GL_TEXTURE_2D, mPipelineTexture[0].handle);
glBindTexture(GL_TEXTURE_2D, mPipelineTexture[0].handle);
}
//==========================================================================
@ -708,10 +704,8 @@ namespace OpenGLESRenderer
void FGLRenderBuffers::BindSceneFogTexture(int index)
{
glActiveTexture(GL_TEXTURE0 + index);
if (mSamples > 1)
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, mSceneFogTex.handle);
else
glBindTexture(GL_TEXTURE_2D, mSceneFogTex.handle);
glBindTexture(GL_TEXTURE_2D, mSceneFogTex.handle);
}
//==========================================================================
@ -723,10 +717,8 @@ namespace OpenGLESRenderer
void FGLRenderBuffers::BindSceneNormalTexture(int index)
{
glActiveTexture(GL_TEXTURE0 + index);
if (mSamples > 1)
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, mSceneNormalTex.handle);
else
glBindTexture(GL_TEXTURE_2D, mSceneNormalTex.handle);
glBindTexture(GL_TEXTURE_2D, mSceneNormalTex.handle);
}
//==========================================================================
@ -738,10 +730,8 @@ namespace OpenGLESRenderer
void FGLRenderBuffers::BindSceneDepthTexture(int index)
{
glActiveTexture(GL_TEXTURE0 + index);
if (mSamples > 1)
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, mSceneDepthStencilTex.handle);
else
glBindTexture(GL_TEXTURE_2D, mSceneDepthStencilTex.handle);
glBindTexture(GL_TEXTURE_2D, mSceneDepthStencilTex.handle);
}
//==========================================================================

View file

@ -518,7 +518,10 @@ void FGLRenderState::Clear(int targets)
if (targets & CT_Depth)
{
gltarget |= GL_DEPTH_BUFFER_BIT;
glClearDepthf(1);
if (glClearDepthf)
glClearDepthf(1);
else
glClearDepth(1);
}
if (targets & CT_Stencil)
{

View file

@ -205,8 +205,19 @@ void SaveCachedProgramBinary(const FString &vertex, const FString &fragment, con
SaveShaders();
}
bool FShader::Load(const char * name, const char * vert_prog_lump, const char * frag_prog_lump, const char * proc_prog_lump, const char * light_fragprog, const char * defines)
bool FShader::Load(const char * name, const char * vert_prog_lump_, const char * frag_prog_lump_, const char * proc_prog_lump_, const char * light_fragprog_, const char * defines)
{
FString vert_prog_lump = vert_prog_lump_;
FString frag_prog_lump = frag_prog_lump_;
FString proc_prog_lump = proc_prog_lump_;
FString light_fragprog = light_fragprog_;
vert_prog_lump.Substitute("shaders/", "shaders_gles/");
frag_prog_lump.Substitute("shaders/", "shaders_gles/");
proc_prog_lump.Substitute("shaders/", "shaders_gles/");
light_fragprog.Substitute("shaders/", "shaders_gles/");
static char buffer[10000];
FString error;
@ -387,7 +398,7 @@ bool FShader::Load(const char * name, const char * vert_prog_lump, const char *
fp_comb << RemoveLayoutLocationDecl(fp_data.GetString(), "in").GetChars() << "\n";
FString placeholder = "\n";
if (proc_prog_lump != NULL)
if (proc_prog_lump.Len())
{
fp_comb << "#line 1\n";
@ -458,7 +469,7 @@ bool FShader::Load(const char * name, const char * vert_prog_lump, const char *
}
fp_comb.Substitute("$placeholder$", placeholder);
if (light_fragprog)
if (light_fragprog.Len())
{
int pp_lump = fileSystem.CheckNumForFullName(light_fragprog, 0);
if (pp_lump == -1) I_Error("Unable to load '%s'", light_fragprog);
@ -664,7 +675,7 @@ FShader *FShaderCollection::Compile (const char *ShaderName, const char *ShaderP
try
{
shader = new FShader(ShaderName);
if (!shader->Load(ShaderName, "shaders/glsl/main.vp", "shaders/glsl/main.fp", ShaderPath, LightModePath, defines.GetChars()))
if (!shader->Load(ShaderName, "shaders_gles/glsl/main.vp", "shaders_gles/glsl/main.fp", ShaderPath, LightModePath, defines.GetChars()))
{
I_FatalError("Unable to load shader %s\n", ShaderName);
}

View file

@ -259,10 +259,10 @@ FString FShaderProgram::PatchShader(ShaderType type, const FString &code, const
void FPresentShaderBase::Init(const char * vtx_shader_name, const char * program_name)
{
FString prolog = Uniforms.CreateDeclaration("Uniforms", PresentUniforms::Desc());
FString prolog = Uniforms.CreateDeclaration("Uniforms", PresentUniforms::Desc(), true);
mShader.reset(new FShaderProgram());
mShader->Compile(FShaderProgram::Vertex, "shaders/pp/screenquad.vp", prolog, 330);
mShader->Compile(FShaderProgram::Vertex, "shaders_gles/pp/screenquad.vp", prolog, 330);
mShader->Compile(FShaderProgram::Fragment, vtx_shader_name, prolog, 330);
mShader->Link(program_name);
mShader->Bind();
@ -281,7 +281,7 @@ void FPresentShader::Bind()
{
if (!mShader)
{
Init("shaders/pp/present.fp", "shaders/pp/present");
Init("shaders_gles/pp/present.fp", "shaders_gles/pp/present");
}
mShader->Bind();
}
@ -292,7 +292,7 @@ void FPresent3DCheckerShader::Bind()
{
if (!mShader)
{
Init("shaders/pp/present_checker3d.fp", "shaders/pp/presentChecker3d");
Init("shaders/pp/present_checker3d.fp", "shaders_gles/pp/presentChecker3d");
}
mShader->Bind();
}
@ -301,7 +301,7 @@ void FPresent3DColumnShader::Bind()
{
if (!mShader)
{
Init("shaders/pp/present_column3d.fp", "shaders/pp/presentColumn3d");
Init("shaders/pp/present_column3d.fp", "shaders_gles/pp/presentColumn3d");
}
mShader->Bind();
}
@ -310,7 +310,7 @@ void FPresent3DRowShader::Bind()
{
if (!mShader)
{
Init("shaders/pp/present_row3d.fp", "shaders/pp/presentRow3d");
Init("shaders/pp/present_row3d.fp", "shaders_gles/pp/presentRow3d");
}
mShader->Bind();
}
@ -324,8 +324,8 @@ void FShadowMapShader::Bind()
FString prolog = Uniforms.CreateDeclaration("Uniforms", ShadowMapUniforms::Desc());
mShader.reset(new FShaderProgram());
mShader->Compile(FShaderProgram::Vertex, "shaders/pp/screenquad.vp", "", 430);
mShader->Compile(FShaderProgram::Fragment, "shaders/pp/shadowmap.fp", prolog, 430);
mShader->Compile(FShaderProgram::Vertex, "shaders_gles/pp/screenquad.vp", "", 430);
mShader->Compile(FShaderProgram::Fragment, "shaders_gles/pp/shadowmap.fp", prolog, 430);
mShader->Link("shaders/glsl/shadowmap");
mShader->SetUniformBufferLocation(Uniforms.BindingPoint(), "Uniforms");
Uniforms.Init();

View file

@ -2,6 +2,55 @@
#include "gles_system.h"
#include <windows.h>
static HMODULE opengl32dll;
static PROC(WINAPI* getprocaddress)(LPCSTR name);
static void* WinGetProcAddressGLES(const char* name)
{
HINSTANCE hGetProcIDDLL = LoadLibraryA("libGLESv2.dll");
int error = GetLastError();
void* addr = GetProcAddress(hGetProcIDDLL, name);
if (!addr)
{
//exit(1);
}
else
{
return addr;
}
}
static int TestPointer(const PROC pTest)
{
ptrdiff_t iTest;
if (!pTest) return 0;
iTest = (ptrdiff_t)pTest;
if (iTest == 1 || iTest == 2 || iTest == 3 || iTest == -1) return 0;
return 1;
}
extern "C" PROC zd_wglGetProcAddress(LPCSTR name);
static void* WinGetProcAddress(const char* name)
{
HMODULE glMod = NULL;
PROC pFunc = zd_wglGetProcAddress((LPCSTR)name);
if (TestPointer(pFunc))
{
return pFunc;
}
glMod = GetModuleHandleA("OpenGL32.dll");
return GetProcAddress(glMod, (LPCSTR)name);
}
namespace OpenGLESRenderer
{
@ -11,6 +60,26 @@ namespace OpenGLESRenderer
void InitGLES()
{
#if USE_GLES2
if (!gladLoadGLES2Loader(&WinGetProcAddressGLES))
{
exit(-1);
}
#else
static bool first = true;
if (first)
{
if (ogl_LoadFunctions() == ogl_LOAD_FAILED)
{
//I_FatalError("Failed to load OpenGL functions.");
}
}
GLuint vao;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
#endif
gles.flags = 0;
gles.glslversion = 3.31;
gles.maxuniforms = 1024 * 16;

View file

@ -23,8 +23,14 @@
#include <sys/stat.h>
#include <fcntl.h>
//GL headers
#include "gl_load/gl_load.h"
#define USE_GLES2 0
#if (USE_GLES2)
#include "glad/glad.h"
#else
#include "gl_load/gl_load.h"
#define GL_DEPTH24_STENCIL8_OES GL_DEPTH24_STENCIL8
#endif
#if defined(__APPLE__)
#include <OpenGL/OpenGL.h>