16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-22 03:29:19 +02:00

opengl error fixes

This commit is contained in:
tmj-fstate
2019-11-14 15:49:12 +01:00
parent 33140dd6a9
commit babb43849e
9 changed files with 70 additions and 34 deletions

View File

@@ -371,6 +371,7 @@ global_settings::ConfigParse(cParser &Parser) {
GfxRenderer = "default"; GfxRenderer = "default";
} }
BasicRenderer = ( GfxRenderer == "simple" ); BasicRenderer = ( GfxRenderer == "simple" );
LegacyRenderer = ( GfxRenderer != "default" );
} }
else if( token == "shadows" ) { else if( token == "shadows" ) {
// shadow render toggle // shadow render toggle
@@ -728,7 +729,10 @@ global_settings::ConfigParse(cParser &Parser) {
#endif #endif
else if (token == "compresstex") { else if (token == "compresstex") {
Parser.getTokens( 1 ); Parser.getTokens( 1 );
Parser >> compress_tex; if( false == gfx_usegles ) {
// ogl es use requires compression to be disabled
Parser >> compress_tex;
}
} }
else if (token == "gfx.framebuffer.width") else if (token == "gfx.framebuffer.width")
{ {
@@ -813,18 +817,22 @@ global_settings::ConfigParse(cParser &Parser) {
Parser.getTokens(1); Parser.getTokens(1);
Parser >> gfx_extraeffects; Parser >> gfx_extraeffects;
} }
/* /*
else if (token == "gfx.usegles") else if (token == "gfx.usegles")
{ {
Parser.getTokens(1); Parser.getTokens(1);
Parser >> gfx_usegles; Parser >> gfx_usegles;
if( true == gfx_usegles ) {
compress_tex = false;
gfx_shadergamma = true;
}
} }
*/
else if (token == "gfx.shadergamma") else if (token == "gfx.shadergamma")
{ {
Parser.getTokens(1); Parser.getTokens(1);
Parser >> gfx_shadergamma; Parser >> gfx_shadergamma;
} }
*/
else if (token == "python.mipmaps") else if (token == "python.mipmaps")
{ {
Parser.getTokens(1); Parser.getTokens(1);

View File

@@ -113,6 +113,7 @@ struct global_settings {
int DynamicLightCount{ 3 }; int DynamicLightCount{ 3 };
bool ScaleSpecularValues{ true }; bool ScaleSpecularValues{ true };
std::string GfxRenderer{ "default" }; std::string GfxRenderer{ "default" };
bool LegacyRenderer{ false };
bool BasicRenderer{ false }; bool BasicRenderer{ false };
bool RenderShadows{ true }; bool RenderShadows{ true };
int RenderCabShadowsRange{ 0 }; int RenderCabShadowsRange{ 0 };

View File

@@ -823,11 +823,13 @@ opengl_texture::create() {
glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(target, GL_TEXTURE_WRAP_S, wrap_mode_s); glTexParameteri(target, GL_TEXTURE_WRAP_S, wrap_mode_s);
glTexParameteri(target, GL_TEXTURE_WRAP_T, wrap_mode_t); glTexParameteri(target, GL_TEXTURE_WRAP_T, wrap_mode_t);
if (data_components == GL_DEPTH_COMPONENT) if (data_components == GL_DEPTH_COMPONENT)
{ {
glTexParameteri(target, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE); glTexParameteri(target, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE);
float borderColor[] = { 0.0f, 0.0f, 0.0f, 0.0f }; if( false == Global.gfx_usegles ) {
glTexParameterfv(target, GL_TEXTURE_BORDER_COLOR, borderColor); float borderColor[] = { 0.0f, 0.0f, 0.0f, 0.0f };
glTexParameterfv( target, GL_TEXTURE_BORDER_COLOR, borderColor );
}
} }
if (Global.gfx_usegles) if (Global.gfx_usegles)
@@ -1026,7 +1028,7 @@ opengl_texture::set_filtering() const {
::glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, Global.AnisotropicFiltering ); ::glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, Global.AnisotropicFiltering );
} }
if( false == Global.gfx_usegles ) { if( Global.LegacyRenderer ) {
bool sharpen{ false }; bool sharpen{ false };
for( auto const &trait : traits ) { for( auto const &trait : traits ) {
@@ -1040,11 +1042,11 @@ opengl_texture::set_filtering() const {
if( true == sharpen ) { if( true == sharpen ) {
// #: sharpen more // #: sharpen more
::glTexEnvf( GL_TEXTURE_FILTER_CONTROL, GL_TEXTURE_LOD_BIAS, -2.0 ); ::glTexEnvf( GL_TEXTURE_FILTER_CONTROL, GL_TEXTURE_LOD_BIAS, -2.0f );
} }
else { else {
// regular texture sharpening // regular texture sharpening
::glTexEnvf( GL_TEXTURE_FILTER_CONTROL, GL_TEXTURE_LOD_BIAS, -1.0 ); ::glTexEnvf( GL_TEXTURE_FILTER_CONTROL, GL_TEXTURE_LOD_BIAS, -1.0f );
} }
} }
} }

View File

@@ -36,7 +36,7 @@ struct opengl_texture {
void void
release(); release();
void void
alloc_rendertarget( GLint format, GLint components, int width, int height, int samples = 1, GLint wrap = GL_CLAMP_TO_BORDER ); alloc_rendertarget( GLint format, GLint components, int width, int height, int samples = 1, GLint wrap = GL_CLAMP_TO_EDGE );
void void
set_components_hint( GLint hint ); set_components_hint( GLint hint );
static void static void

View File

@@ -39,6 +39,8 @@ void gl::buffer::bind_base(targets target, GLuint index)
void gl::buffer::unbind(targets target) void gl::buffer::unbind(targets target)
{ {
if( binding_points[ target ] == 0 ) { return; }
glBindBuffer(glenum_target(target), 0); glBindBuffer(glenum_target(target), 0);
binding_points[target] = 0; binding_points[target] = 0;
} }

View File

@@ -34,7 +34,8 @@ void gl::query::end()
std::optional<int64_t> gl::query::result() std::optional<int64_t> gl::query::result()
{ {
GLuint ready; end(); // intercept potential error if the result check is called for still active object
GLuint ready;
glGetQueryObjectuiv(*this, GL_QUERY_RESULT_AVAILABLE, &ready); glGetQueryObjectuiv(*this, GL_QUERY_RESULT_AVAILABLE, &ready);
int64_t value = 0; int64_t value = 0;
if (ready) { if (ready) {

View File

@@ -26,8 +26,25 @@ int const EU07_PICKBUFFERSIZE{1024}; // size of (square) textures bound with the
auto const gammacorrection { glm::vec3( 2.2f ) }; auto const gammacorrection { glm::vec3( 2.2f ) };
void GLAPIENTRY
ErrorCallback( GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, const void* userParam ) {
ErrorLog(
"bad gfx code: " + std::string( type == GL_DEBUG_TYPE_ERROR ? "** GL ERROR **" : "" )
+ " type = " + to_hex_str( id )
+ ", severity = " + to_hex_str( severity )
+ ", message = " + message );
}
bool opengl33_renderer::Init(GLFWwindow *Window) bool opengl33_renderer::Init(GLFWwindow *Window)
{ {
/*
if( false == Global.gfx_usegles ) {
// enable for gles after move to 3.2+
glEnable( GL_DEBUG_OUTPUT );
glDebugMessageCallback( ErrorCallback, 0 );
}
*/
if (!Init_caps()) if (!Init_caps())
return false; return false;
@@ -172,7 +189,7 @@ bool opengl33_renderer::Init(GLFWwindow *Window)
WriteLog("cabshadows enabled"); WriteLog("cabshadows enabled");
} }
if (Global.gfx_envmap_enabled) if (Global.gfx_envmap_enabled)
{ {
m_env_rb = std::make_unique<gl::renderbuffer>(); m_env_rb = std::make_unique<gl::renderbuffer>();
m_env_rb->alloc(Global.gfx_format_depth, gl::ENVMAP_SIZE, gl::ENVMAP_SIZE); m_env_rb->alloc(Global.gfx_format_depth, gl::ENVMAP_SIZE, gl::ENVMAP_SIZE);
@@ -274,7 +291,7 @@ bool opengl33_renderer::Init(GLFWwindow *Window)
WriteLog("gfx renderer setup complete"); WriteLog("gfx renderer setup complete");
return true; return true;
} }
/* /*
bool opengl33_renderer::AddViewport(const global_settings::extraviewport_config &conf) bool opengl33_renderer::AddViewport(const global_settings::extraviewport_config &conf)
@@ -740,12 +757,12 @@ void opengl33_renderer::Render_pass(viewport_config &vp, rendermode const Mode)
glDebug("uilayer render"); glDebug("uilayer render");
Timer::subsystem.gfx_gui.start(); Timer::subsystem.gfx_gui.start();
if (vp.main) { if (vp.main) {
draw_debug_ui(); draw_debug_ui();
Application.render_ui(); Application.render_ui();
} }
Timer::subsystem.gfx_gui.stop(); Timer::subsystem.gfx_gui.stop();
// restore binding // restore binding
scene_ubo->bind_uniform(); scene_ubo->bind_uniform();
@@ -1691,11 +1708,13 @@ void opengl33_renderer::Bind_Material_Shadow(material_handle const Material)
m_textures.bind(0, material.textures[0]); m_textures.bind(0, material.textures[0]);
m_alpha_shadow_shader->bind(); m_alpha_shadow_shader->bind();
} }
else else {
m_shadow_shader->bind(); m_shadow_shader->bind();
}
} }
else else {
m_shadow_shader->bind(); m_shadow_shader->bind();
}
} }
opengl_material const &opengl33_renderer::Material(material_handle const Material) const opengl_material const &opengl33_renderer::Material(material_handle const Material) const
@@ -2400,7 +2419,7 @@ bool opengl33_renderer::Render_cab(TDynamicObject const *Dynamic, float const Li
::glTranslated(originoffset.x, originoffset.y, originoffset.z); ::glTranslated(originoffset.x, originoffset.y, originoffset.z);
::glMultMatrixd(Dynamic->mMatrix.readArray()); ::glMultMatrixd(Dynamic->mMatrix.readArray());
switch (m_renderpass.draw_mode) switch (m_renderpass.draw_mode)
{ {
case rendermode::color: case rendermode::color:
{ {
@@ -2440,14 +2459,17 @@ bool opengl33_renderer::Render_cab(TDynamicObject const *Dynamic, float const Li
break; break;
} }
case rendermode::cabshadows: case rendermode::cabshadows: {
if (true == Alpha) if( true == Alpha ) {
// translucent parts // translucent parts
Render_Alpha(Dynamic->mdKabina, Dynamic->Material(), 0.0); Render_Alpha( Dynamic->mdKabina, Dynamic->Material(), 0.0 );
else }
// opaque parts else {
Render(Dynamic->mdKabina, Dynamic->Material(), 0.0); // opaque parts
break; Render( Dynamic->mdKabina, Dynamic->Material(), 0.0 );
}
break;
}
case rendermode::pickcontrols: case rendermode::pickcontrols:
{ {
Render(Dynamic->mdKabina, Dynamic->Material(), 0.0); Render(Dynamic->mdKabina, Dynamic->Material(), 0.0);
@@ -2585,7 +2607,7 @@ void opengl33_renderer::Render(TSubModel *Submodel)
case rendermode::shadows: case rendermode::shadows:
case rendermode::cabshadows: case rendermode::cabshadows:
{ {
if (Submodel->m_material < 0) if (Submodel->m_material < 0)
{ // zmienialne skóry { // zmienialne skóry
Bind_Material_Shadow(Submodel->ReplacableSkinId[-Submodel->m_material]); Bind_Material_Shadow(Submodel->ReplacableSkinId[-Submodel->m_material]);
} }
@@ -2594,8 +2616,8 @@ void opengl33_renderer::Render(TSubModel *Submodel)
// również 0 // również 0
Bind_Material_Shadow(Submodel->m_material); Bind_Material_Shadow(Submodel->m_material);
} }
draw(Submodel->m_geometry); draw(Submodel->m_geometry);
break; break;
} }
case rendermode::pickscenery: case rendermode::pickscenery:
{ {

View File

@@ -77,9 +77,9 @@
#include "glad/glad.h" #include "glad/glad.h"
#include "GL/glu.h" //#include "GL/glu.h"
#define GLFW_INCLUDE_NONE #define GLFW_INCLUDE_GLU
#include <GLFW/glfw3.h> #include <GLFW/glfw3.h>
#ifndef GLFW_TRUE #ifndef GLFW_TRUE

View File

@@ -92,7 +92,7 @@ ui_layer::init( GLFWwindow *Window ) {
if( Global.GfxRenderer == "default" ) { if( Global.GfxRenderer == "default" ) {
// opengl 3.3 render path // opengl 3.3 render path
if( Global.gfx_usegles ) { if( Global.gfx_usegles ) {
ImGui_ImplOpenGL3_Init( "#version 300 es\nprecision highp float;" ); ImGui_ImplOpenGL3_Init( "#version 300 es" );
} }
else { else {
ImGui_ImplOpenGL3_Init( "#version 330 core" ); ImGui_ImplOpenGL3_Init( "#version 330 core" );