From 63a220a349fbab52e08a31c67ea353290dd777e7 Mon Sep 17 00:00:00 2001 From: Lynix Date: Thu, 3 May 2012 00:07:58 +0200 Subject: [PATCH] Added occlusion queries --- include/Nazara/Renderer/OpenGL.hpp | 1 - include/Nazara/Renderer/Renderer.hpp | 1 + readme_fr.txt | 2 +- src/Nazara/Renderer/HardwareBuffer.cpp | 1 - src/Nazara/Renderer/OpenGL.cpp | 46 ++++---------------------- src/Nazara/Renderer/Renderer.cpp | 5 +-- 6 files changed, 12 insertions(+), 44 deletions(-) diff --git a/include/Nazara/Renderer/OpenGL.hpp b/include/Nazara/Renderer/OpenGL.hpp index c094bf638..943966368 100644 --- a/include/Nazara/Renderer/OpenGL.hpp +++ b/include/Nazara/Renderer/OpenGL.hpp @@ -36,7 +36,6 @@ class NAZARA_API NzOpenGL AnisotropicFilter, FP64, Framebuffer_Object, - Occlusion_Query, Texture3D, Count diff --git a/include/Nazara/Renderer/Renderer.hpp b/include/Nazara/Renderer/Renderer.hpp index a82c51825..97a55af1d 100644 --- a/include/Nazara/Renderer/Renderer.hpp +++ b/include/Nazara/Renderer/Renderer.hpp @@ -27,6 +27,7 @@ enum nzRendererCap nzRendererCap_FP64, nzRendererCap_HardwareBuffer, nzRendererCap_MultipleRenderTargets, + nzRendererCap_OcclusionQuery, nzRendererCap_SoftwareBuffer, nzRendererCap_Texture3D, nzRendererCap_TextureCubemap, diff --git a/readme_fr.txt b/readme_fr.txt index 7e5270bf3..81c3e99ad 100644 --- a/readme_fr.txt +++ b/readme_fr.txt @@ -12,7 +12,7 @@ Auteurs ------- Jérôme "Lynix" Leclercq - développeur principal (Lynix680@gmail.com) -Rémi "overdrivr" Bèges - developpeur & aide (remi.beges@laposte.net) +Rémi "overdrivr" Bèges - développeur & aide (remi.beges@laposte.net) Installation ------------ diff --git a/src/Nazara/Renderer/HardwareBuffer.cpp b/src/Nazara/Renderer/HardwareBuffer.cpp index 7d15071fd..d33316323 100644 --- a/src/Nazara/Renderer/HardwareBuffer.cpp +++ b/src/Nazara/Renderer/HardwareBuffer.cpp @@ -150,7 +150,6 @@ bool NzHardwareBuffer::Fill(const void* data, unsigned int offset, unsigned int } else*/ { - // La longueur que nous recevons est en fait la taille nzUInt8* ptr = lockBuffer(m_type, (size == m_parent->GetSize()) ? nzBufferLock_DiscardAndWrite : nzBufferLock_WriteOnly, offset, size); if (!ptr) { diff --git a/src/Nazara/Renderer/OpenGL.cpp b/src/Nazara/Renderer/OpenGL.cpp index f24a1029b..b606d9e26 100644 --- a/src/Nazara/Renderer/OpenGL.cpp +++ b/src/Nazara/Renderer/OpenGL.cpp @@ -135,6 +135,7 @@ bool NzOpenGL::Initialize() { glActiveTexture = reinterpret_cast(LoadEntry("glActiveTexture")); glAttachShader = reinterpret_cast(LoadEntry("glAttachShader")); + glBeginQuery = reinterpret_cast(LoadEntry("glBeginQuery")); glBindAttribLocation = reinterpret_cast(LoadEntry("glBindAttribLocation")); glBindBuffer = reinterpret_cast(LoadEntry("glBindBuffer")); glBindTexture = reinterpret_cast(LoadEntry("glBindTexture")); @@ -151,6 +152,7 @@ bool NzOpenGL::Initialize() glCullFace = reinterpret_cast(LoadEntry("glCullFace")); glCompileShader = reinterpret_cast(LoadEntry("glCompileShader")); glDeleteBuffers = reinterpret_cast(LoadEntry("glDeleteBuffers")); + glDeleteQueries = reinterpret_cast(LoadEntry("glDeleteQueries")); glDeleteProgram = reinterpret_cast(LoadEntry("glDeleteProgram")); glDeleteShader = reinterpret_cast(LoadEntry("glDeleteShader")); glDeleteTextures = reinterpret_cast(LoadEntry("glDeleteTextures")); @@ -165,10 +167,15 @@ bool NzOpenGL::Initialize() glFlush = reinterpret_cast(LoadEntry("glFlush")); glEnable = reinterpret_cast(LoadEntry("glEnable")); glEnableVertexAttribArray = reinterpret_cast(LoadEntry("glEnableVertexAttribArray")); + glEndQuery = reinterpret_cast(LoadEntry("glEndQuery")); glGenBuffers = reinterpret_cast(LoadEntry("glGenBuffers")); + glGenQueries = reinterpret_cast(LoadEntry("glGenQueries")); glGenTextures = reinterpret_cast(LoadEntry("glGenTextures")); glGetBufferParameteriv = reinterpret_cast(LoadEntry("glGetBufferParameteriv")); glGetError = reinterpret_cast(LoadEntry("glGetError")); + glGetQueryiv = reinterpret_cast(LoadEntry("glGetQueryiv")); + glGetQueryObjectiv = reinterpret_cast(LoadEntry("glGetQueryObjectiv")); + glGetQueryObjectuiv = reinterpret_cast(LoadEntry("glGetQueryObjectuiv")); glGetIntegerv = reinterpret_cast(LoadEntry("glGetIntegerv")); glGetProgramiv = reinterpret_cast(LoadEntry("glGetProgramiv")); glGetProgramInfoLog = reinterpret_cast(LoadEntry("glGetProgramInfoLog")); @@ -354,45 +361,6 @@ bool NzOpenGL::Initialize() } } - // Occlusion_Query - try - { - glBeginQuery = reinterpret_cast(LoadEntry("glBeginQuery")); - glDeleteQueries = reinterpret_cast(LoadEntry("glDeleteQueries")); - glEndQuery = reinterpret_cast(LoadEntry("glEndQuery")); - glGenQueries = reinterpret_cast(LoadEntry("glGenQueries")); - glGetQueryiv = reinterpret_cast(LoadEntry("glGetQueryiv")); - glGetQueryObjectiv = reinterpret_cast(LoadEntry("glGetQueryObjectiv")); - glGetQueryObjectuiv = reinterpret_cast(LoadEntry("glGetQueryObjectuiv")); - - openGLextensions[NzOpenGL::Occlusion_Query] = true; - } - catch (const std::exception& e) - { - if (openGLversion >= 150) - NazaraWarning("Failed to load core Occlusion Queries (" + NzString(e.what()) + "), loading ARB_occlusion_query..."); - - if (IsSupported("GL_ARB_occlusion_query")) - { - try - { - glBeginQuery = reinterpret_cast(LoadEntry("glBeginQueryARB")); - glDeleteQueries = reinterpret_cast(LoadEntry("glDeleteQueriesARB")); - glEndQuery = reinterpret_cast(LoadEntry("glEndQueryARB")); - glGenQueries = reinterpret_cast(LoadEntry("glGenQueriesARB")); - glGetQueryiv = reinterpret_cast(LoadEntry("glGetQueryivARB")); - glGetQueryObjectiv = reinterpret_cast(LoadEntry("glGetQueryObjectivARB")); - glGetQueryObjectuiv = reinterpret_cast(LoadEntry("glGetQueryObjectuivARB")); - - openGLextensions[NzOpenGL::Occlusion_Query] = true; - } - catch (const std::exception& e) - { - NazaraError("Failed to load ARB_occlusion_query: " + NzString(e.what())); - } - } - } - // Texture3D if (IsSupported("GL_EXT_texture3D")) { diff --git a/src/Nazara/Renderer/Renderer.cpp b/src/Nazara/Renderer/Renderer.cpp index c3460f72c..661561266 100644 --- a/src/Nazara/Renderer/Renderer.cpp +++ b/src/Nazara/Renderer/Renderer.cpp @@ -155,9 +155,10 @@ bool NzRenderer::Initialize() { m_capabilities[nzRendererCap_AnisotropicFilter] = NzOpenGL::IsSupported(NzOpenGL::AnisotropicFilter); m_capabilities[nzRendererCap_FP64] = NzOpenGL::IsSupported(NzOpenGL::FP64); - m_capabilities[nzRendererCap_HardwareBuffer] = true; // Natif depuis OpenGL 2.0 + m_capabilities[nzRendererCap_HardwareBuffer] = true; // Natif depuis OpenGL 1.5 m_capabilities[nzRendererCap_MultipleRenderTargets] = true; // Natif depuis OpenGL 2.0 - m_capabilities[nzRendererCap_SoftwareBuffer] = NzOpenGL::GetVersion() <= 310; // Déprécié en OpenGL 3.1 + m_capabilities[nzRendererCap_OcclusionQuery] = // Natif depuis OpenGL 1.5 + m_capabilities[nzRendererCap_SoftwareBuffer] = NzOpenGL::GetVersion() <= 300; // Déprécié en OpenGL 3 m_capabilities[nzRendererCap_Texture3D] = NzOpenGL::IsSupported(NzOpenGL::Texture3D); m_capabilities[nzRendererCap_TextureCubemap] = true; // Natif depuis OpenGL 1.3 m_capabilities[nzRendererCap_TextureMulti] = true; // Natif depuis OpenGL 1.3