mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-10 10:08:18 +00:00
Add gfx debug
This commit is contained in:
parent
e88a7dee0a
commit
5b4d99275f
|
@ -371,12 +371,15 @@ void CCommandProcessorFragment_OpenGL::SetState(const CCommandBuffer::SState &St
|
|||
}
|
||||
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
if(!m_HasShaders)
|
||||
{
|
||||
if(m_Has3DTextures)
|
||||
glDisable(GL_TEXTURE_3D);
|
||||
if(m_Has2DArrayTextures)
|
||||
{
|
||||
glDisable(m_2DArrayTarget);
|
||||
}
|
||||
}
|
||||
|
||||
if(m_HasShaders && IsNewApi())
|
||||
{
|
||||
|
@ -413,11 +416,13 @@ void CCommandProcessorFragment_OpenGL::SetState(const CCommandBuffer::SState &St
|
|||
{
|
||||
if(m_Has2DArrayTextures)
|
||||
{
|
||||
if(!m_HasShaders)
|
||||
glEnable(m_2DArrayTarget);
|
||||
glBindTexture(m_2DArrayTarget, m_aTextures[State.m_Texture].m_Tex2DArray);
|
||||
}
|
||||
else if(m_Has3DTextures)
|
||||
{
|
||||
if(!m_HasShaders)
|
||||
glEnable(GL_TEXTURE_3D);
|
||||
glBindTexture(GL_TEXTURE_3D, m_aTextures[State.m_Texture].m_Tex2DArray);
|
||||
}
|
||||
|
@ -992,6 +997,8 @@ void CCommandProcessorFragment_OpenGL2::SetState(const CCommandBuffer::SState &S
|
|||
if(!IsNewApi())
|
||||
{
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
if(!m_HasShaders)
|
||||
{
|
||||
if(m_Has3DTextures)
|
||||
glDisable(GL_TEXTURE_3D);
|
||||
if(m_Has2DArrayTextures)
|
||||
|
@ -999,6 +1006,7 @@ void CCommandProcessorFragment_OpenGL2::SetState(const CCommandBuffer::SState &S
|
|||
glDisable(m_2DArrayTarget);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// texture
|
||||
if(State.m_Texture >= 0 && State.m_Texture < CCommandBuffer::MAX_TEXTURES)
|
||||
|
@ -1029,7 +1037,7 @@ void CCommandProcessorFragment_OpenGL2::SetState(const CCommandBuffer::SState &S
|
|||
Slot = 0;
|
||||
if(!Use2DArrayTextures)
|
||||
{
|
||||
if(!IsNewApi())
|
||||
if(!IsNewApi() && !m_HasShaders)
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
glBindTexture(GL_TEXTURE_2D, m_aTextures[State.m_Texture].m_Tex);
|
||||
if(IsNewApi())
|
||||
|
@ -1039,7 +1047,7 @@ void CCommandProcessorFragment_OpenGL2::SetState(const CCommandBuffer::SState &S
|
|||
{
|
||||
if(!m_Has2DArrayTextures)
|
||||
{
|
||||
if(!IsNewApi())
|
||||
if(!IsNewApi() && !m_HasShaders)
|
||||
glEnable(GL_TEXTURE_3D);
|
||||
glBindTexture(GL_TEXTURE_3D, m_aTextures[State.m_Texture].m_Tex2DArray);
|
||||
if(IsNewApi())
|
||||
|
@ -1047,7 +1055,7 @@ void CCommandProcessorFragment_OpenGL2::SetState(const CCommandBuffer::SState &S
|
|||
}
|
||||
else
|
||||
{
|
||||
if(!IsNewApi())
|
||||
if(!IsNewApi() && !m_HasShaders)
|
||||
glEnable(m_2DArrayTarget);
|
||||
glBindTexture(m_2DArrayTarget, m_aTextures[State.m_Texture].m_Tex2DArray);
|
||||
if(IsNewApi())
|
||||
|
@ -1340,6 +1348,8 @@ bool CCommandProcessorFragment_OpenGL2::IsTileMapAnalysisSucceeded()
|
|||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glDisable(GL_SCISSOR_TEST);
|
||||
|
||||
if(!m_HasShaders)
|
||||
{
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
if(m_Has3DTextures)
|
||||
glDisable(GL_TEXTURE_3D);
|
||||
|
@ -1358,6 +1368,7 @@ bool CCommandProcessorFragment_OpenGL2::IsTileMapAnalysisSucceeded()
|
|||
glEnable(m_2DArrayTarget);
|
||||
glBindTexture(m_2DArrayTarget, FakeTexture);
|
||||
}
|
||||
}
|
||||
|
||||
static_assert(sizeof(m_aStreamVertices) / sizeof(m_aStreamVertices[0]) >= 256 * 4, "Keep the number of stream vertices >= 256 * 4.");
|
||||
|
||||
|
@ -2488,7 +2499,7 @@ void CCommandProcessorFragment_OpenGL3_3::Cmd_Init(const SCommand_Init *pCommand
|
|||
m_pSpriteProgram->m_LocCenter = m_pSpriteProgram->GetUniformLoc("Center");
|
||||
m_pSpriteProgram->m_LocVertciesColor = m_pSpriteProgram->GetUniformLoc("VerticesColor");
|
||||
|
||||
m_pSpriteProgram->SetUniform(m_pSpriteProgram->m_LocRotation, 0);
|
||||
m_pSpriteProgram->SetUniform(m_pSpriteProgram->m_LocRotation, 0.0f);
|
||||
float Center[2] = {0.f, 0.f};
|
||||
m_pSpriteProgram->SetUniformVec2(m_pSpriteProgram->m_LocCenter, 1, Center);
|
||||
}
|
||||
|
@ -3746,6 +3757,55 @@ static void ParseVersionString(const GLubyte *pStr, int &VersionMajor, int &Vers
|
|||
}
|
||||
}
|
||||
|
||||
static const char *GetGLErrorName(GLenum Type)
|
||||
{
|
||||
if(Type == GL_DEBUG_TYPE_ERROR)
|
||||
return "ERROR";
|
||||
else if(Type == GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR)
|
||||
return "DEPRECATED BEHAVIOR";
|
||||
else if(Type == GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR)
|
||||
return "UNDEFINED BEHAVIOR";
|
||||
else if(Type == GL_DEBUG_TYPE_PORTABILITY)
|
||||
return "PORTABILITY";
|
||||
else if(Type == GL_DEBUG_TYPE_PERFORMANCE)
|
||||
return "PERFORMANCE";
|
||||
else if(Type == GL_DEBUG_TYPE_OTHER)
|
||||
return "OTHER";
|
||||
else if(Type == GL_DEBUG_TYPE_MARKER)
|
||||
return "MARKER";
|
||||
else if(Type == GL_DEBUG_TYPE_PUSH_GROUP)
|
||||
return "PUSH_GROUP";
|
||||
else if(Type == GL_DEBUG_TYPE_POP_GROUP)
|
||||
return "POP_GROUP";
|
||||
return "UNKNOWN";
|
||||
};
|
||||
|
||||
static const char *GetGLSeverity(GLenum Type)
|
||||
{
|
||||
if(Type == GL_DEBUG_SEVERITY_HIGH)
|
||||
return "high"; // All OpenGL Errors, shader compilation/linking errors, or highly-dangerous undefined behavior
|
||||
else if(Type == GL_DEBUG_SEVERITY_MEDIUM)
|
||||
return "medium"; // Major performance warnings, shader compilation/linking warnings, or the use of deprecated functionality
|
||||
else if(Type == GL_DEBUG_SEVERITY_LOW)
|
||||
return "low"; // Redundant state change performance warning, or unimportant undefined behavior
|
||||
else if(Type == GL_DEBUG_SEVERITY_NOTIFICATION)
|
||||
return "notification"; // Anything that isn't an error or performance issue.
|
||||
|
||||
return "unknown";
|
||||
}
|
||||
|
||||
static void GLAPIENTRY
|
||||
GfxOpenGLMessageCallback(GLenum source,
|
||||
GLenum type,
|
||||
GLuint id,
|
||||
GLenum severity,
|
||||
GLsizei length,
|
||||
const GLchar *message,
|
||||
const void *userParam)
|
||||
{
|
||||
dbg_msg("gfx", "[%s] (importance: %s) %s", GetGLErrorName(type), GetGLSeverity(severity), message);
|
||||
}
|
||||
|
||||
void CCommandProcessorFragment_SDL::Cmd_Init(const SCommand_Init *pCommand)
|
||||
{
|
||||
m_GLContext = pCommand->m_GLContext;
|
||||
|
@ -3762,6 +3822,27 @@ void CCommandProcessorFragment_SDL::Cmd_Init(const SCommand_Init *pCommand)
|
|||
glEnable(GL_ALPHA_TEST);
|
||||
glDepthMask(0);
|
||||
|
||||
if(g_Config.m_DbgGfx)
|
||||
{
|
||||
if(GLEW_KHR_debug || GLEW_ARB_debug_output)
|
||||
{
|
||||
// During init, enable debug output
|
||||
if(GLEW_KHR_debug)
|
||||
{
|
||||
glEnable(GL_DEBUG_OUTPUT);
|
||||
glDebugMessageCallback(GfxOpenGLMessageCallback, 0);
|
||||
}
|
||||
else if(GLEW_ARB_debug_output)
|
||||
{
|
||||
glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB);
|
||||
glDebugMessageCallbackARB(GfxOpenGLMessageCallback, 0);
|
||||
}
|
||||
dbg_msg("gfx", "Enabled OpenGL debug mode");
|
||||
}
|
||||
else
|
||||
dbg_msg("gfx", "Requested OpenGL debug mode, but the driver does not support the required extension");
|
||||
}
|
||||
|
||||
// check what this context can do
|
||||
const GLubyte *pVersionString = glGetString(GL_VERSION);
|
||||
dbg_msg("OpenGL", "Version string: %s", (const char *)pVersionString);
|
||||
|
|
|
@ -175,6 +175,7 @@ MACRO_CONFIG_INT(DbgCurl, dbg_curl, 0, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SERVER, "D
|
|||
MACRO_CONFIG_INT(DbgPref, dbg_pref, 0, 0, 1, CFGFLAG_SERVER, "Performance outputs")
|
||||
MACRO_CONFIG_INT(DbgGraphs, dbg_graphs, 0, 0, 1, CFGFLAG_CLIENT, "Performance graphs")
|
||||
MACRO_CONFIG_INT(DbgHitch, dbg_hitch, 0, 0, 0, CFGFLAG_SERVER, "Hitch warnings")
|
||||
MACRO_CONFIG_INT(DbgGfx, dbg_gfx, 0, 0, 1, CFGFLAG_CLIENT, "Show OpenGL warnings and errors, if the GPU supports it")
|
||||
#ifdef CONF_DEBUG
|
||||
MACRO_CONFIG_INT(DbgStress, dbg_stress, 0, 0, 0, CFGFLAG_CLIENT | CFGFLAG_SERVER, "Stress systems")
|
||||
MACRO_CONFIG_INT(DbgStressNetwork, dbg_stress_network, 0, 0, 0, CFGFLAG_CLIENT | CFGFLAG_SERVER, "Stress network")
|
||||
|
|
Loading…
Reference in a new issue