mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2025-04-17 13:20:49 +00:00
Update to various GLES files
This commit is contained in:
parent
4535c7141f
commit
cf90671b21
8 changed files with 127 additions and 44 deletions
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in a new issue