diff --git a/include/Nazara/Renderer/OpenGL.hpp b/include/Nazara/Renderer/OpenGL.hpp index 411627e93..55dc1c2ca 100644 --- a/include/Nazara/Renderer/OpenGL.hpp +++ b/include/Nazara/Renderer/OpenGL.hpp @@ -151,6 +151,7 @@ NAZARA_API extern PFNGLGENVERTEXARRAYSPROC glGenVertexArrays; NAZARA_API extern PFNGLGETBUFFERPARAMETERIVPROC glGetBufferParameteriv; NAZARA_API extern PFNGLGETDEBUGMESSAGELOGPROC glGetDebugMessageLog; NAZARA_API extern PFNGLGETERRORPROC glGetError; +NAZARA_API extern PFNGLGETFLOATVPROC glGetFloatv; NAZARA_API extern PFNGLGETINTEGERVPROC glGetIntegerv; NAZARA_API extern PFNGLGETPROGRAMIVPROC glGetProgramiv; NAZARA_API extern PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog; @@ -172,6 +173,7 @@ NAZARA_API extern PFNGLLINKPROGRAMPROC glLinkProgram; NAZARA_API extern PFNGLMAPBUFFERPROC glMapBuffer; NAZARA_API extern PFNGLMAPBUFFERRANGEPROC glMapBufferRange; NAZARA_API extern PFNGLPIXELSTOREIPROC glPixelStorei; +NAZARA_API extern PFNGLPOINTSIZEPROC glPointSize; NAZARA_API extern PFNGLPOLYGONMODEPROC glPolygonMode; NAZARA_API extern PFNGLPROGRAMUNIFORM1DPROC glProgramUniform1d; NAZARA_API extern PFNGLPROGRAMUNIFORM1FPROC glProgramUniform1f; diff --git a/include/Nazara/Renderer/Renderer.hpp b/include/Nazara/Renderer/Renderer.hpp index b34b16965..23f1964f9 100644 --- a/include/Nazara/Renderer/Renderer.hpp +++ b/include/Nazara/Renderer/Renderer.hpp @@ -41,6 +41,7 @@ class NAZARA_API NzRenderer static unsigned int GetMaxAnisotropyLevel(); static unsigned int GetMaxRenderTargets(); static unsigned int GetMaxTextureUnits(); + static float GetPointSize(); static NzShader* GetShader(); static NzRenderTarget* GetTarget(); static NzRectui GetViewport(); @@ -60,6 +61,7 @@ class NAZARA_API NzRenderer static void SetFaceFilling(nzFaceFilling fillingMode); static bool SetIndexBuffer(const NzIndexBuffer* indexBuffer); static void SetMatrix(nzMatrixType type, const NzMatrix4f& matrix); + static void SetPointSize(float size); static bool SetShader(NzShader* shader); static void SetStencilCompareFunction(nzRendererComparison compareFunc); static void SetStencilFailOperation(nzStencilOperation failOperation); diff --git a/src/Nazara/Renderer/OpenGL.cpp b/src/Nazara/Renderer/OpenGL.cpp index 4f4ffedf7..bb4f99a4b 100644 --- a/src/Nazara/Renderer/OpenGL.cpp +++ b/src/Nazara/Renderer/OpenGL.cpp @@ -262,10 +262,11 @@ namespace NzOpenGL glGenTextures = reinterpret_cast(LoadEntry("glGenTextures")); glGetBufferParameteriv = reinterpret_cast(LoadEntry("glGetBufferParameteriv")); glGetError = reinterpret_cast(LoadEntry("glGetError")); + glGetFloatv = reinterpret_cast(LoadEntry("glGetFloatv")); + glGetIntegerv = reinterpret_cast(LoadEntry("glGetIntegerv")); 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")); glGetShaderInfoLog = reinterpret_cast(LoadEntry("glGetShaderInfoLog")); @@ -280,6 +281,7 @@ namespace NzOpenGL glLinkProgram = reinterpret_cast(LoadEntry("glLinkProgram")); glMapBuffer = reinterpret_cast(LoadEntry("glMapBuffer")); glPixelStorei = reinterpret_cast(LoadEntry("glPixelStorei")); + glPointSize = reinterpret_cast(LoadEntry("glPointSize")); glPolygonMode = reinterpret_cast(LoadEntry("glPolygonMode")); glReadPixels = reinterpret_cast(LoadEntry("glReadPixels")); glScissor = reinterpret_cast(LoadEntry("glScissor")); @@ -936,6 +938,7 @@ PFNGLGENVERTEXARRAYSPROC glGenVertexArrays = nullptr; PFNGLGETBUFFERPARAMETERIVPROC glGetBufferParameteriv = nullptr; PFNGLGETDEBUGMESSAGELOGPROC glGetDebugMessageLog = nullptr; PFNGLGETERRORPROC glGetError = nullptr; +PFNGLGETFLOATVPROC glGetFloatv = nullptr; PFNGLGETINTEGERVPROC glGetIntegerv = nullptr; PFNGLGETPROGRAMIVPROC glGetProgramiv = nullptr; PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog = nullptr; @@ -957,6 +960,7 @@ PFNGLLINKPROGRAMPROC glLinkProgram = nullptr; PFNGLMAPBUFFERPROC glMapBuffer = nullptr; PFNGLMAPBUFFERRANGEPROC glMapBufferRange = nullptr; PFNGLPIXELSTOREIPROC glPixelStorei = nullptr; +PFNGLPOINTSIZEPROC glPointSize = nullptr; PFNGLPOLYGONMODEPROC glPolygonMode = nullptr; PFNGLPROGRAMUNIFORM1DPROC glProgramUniform1d = nullptr; PFNGLPROGRAMUNIFORM1FPROC glProgramUniform1f = nullptr; diff --git a/src/Nazara/Renderer/Renderer.cpp b/src/Nazara/Renderer/Renderer.cpp index a1c280493..b3d1e68fe 100644 --- a/src/Nazara/Renderer/Renderer.cpp +++ b/src/Nazara/Renderer/Renderer.cpp @@ -250,6 +250,14 @@ unsigned int NzRenderer::GetMaxTextureUnits() return s_maxTextureUnit; } +float NzRenderer::GetPointSize() +{ + float pointSize; + glGetFloatv(GL_POINT_SIZE, &pointSize); + + return pointSize; +} + NzShader* NzRenderer::GetShader() { return s_shader; @@ -514,6 +522,19 @@ void NzRenderer::SetMatrix(nzMatrixType type, const NzMatrix4f& matrix) } } +void NzRenderer::SetPointSize(float size) +{ + #if NAZARA_RENDERER_SAFE + if (size <= 0.f) + { + NazaraError("Size must be over zero"); + return; + } + #endif + + glPointSize(size); +} + bool NzRenderer::SetShader(NzShader* shader) { if (s_shader == shader) @@ -856,15 +877,15 @@ bool NzRenderer::EnsureStateUpdate() NzHardwareBuffer* vertexBufferImpl = static_cast(s_vertexBuffer->GetBuffer()->GetImpl()); vertexBufferImpl->Bind(); - const nzUInt8* buffer = reinterpret_cast(s_vertexBuffer->GetPointer()); - + const nzUInt8* buffer = static_cast(s_vertexBuffer->GetPointer()); unsigned int stride = s_vertexDeclaration->GetStride(nzElementStream_VertexData); for (unsigned int i = 0; i <= nzElementUsage_Max; ++i) { - const NzVertexElement* element = s_vertexDeclaration->GetElement(nzElementStream_VertexData, static_cast(i)); - - if (element) + nzElementUsage usage = static_cast(i); + if (s_vertexDeclaration->HasElement(nzElementStream_VertexData, usage)) { + const NzVertexElement* element = s_vertexDeclaration->GetElement(nzElementStream_VertexData, usage); + glEnableVertexAttribArray(NzOpenGL::AttributeIndex[i]); glVertexAttribPointer(NzOpenGL::AttributeIndex[i], NzVertexDeclaration::GetElementCount(element->type),