mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-22 10:29:19 +02:00
opengl error fixes
This commit is contained in:
14
Globals.cpp
14
Globals.cpp
@@ -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);
|
||||||
|
|||||||
@@ -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 };
|
||||||
|
|||||||
14
Texture.cpp
14
Texture.cpp
@@ -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 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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:
|
||||||
{
|
{
|
||||||
|
|||||||
4
stdafx.h
4
stdafx.h
@@ -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
|
||||||
|
|||||||
@@ -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" );
|
||||||
|
|||||||
Reference in New Issue
Block a user