Replaced OpenGL namespace with static class

Fixed OpenGL functions not being exported
It is also more consistent


Former-commit-id: 3eddcb6f72412443eb56580180d0b9544ae4a9df
This commit is contained in:
Lynix 2012-12-13 15:47:29 +01:00
parent 73fdb9baaf
commit 68c6aa664a
2 changed files with 803 additions and 805 deletions

View File

@ -43,12 +43,13 @@ enum nzOpenGLExtension
using NzOpenGLFunc = void (*)(); using NzOpenGLFunc = void (*)();
namespace NzOpenGL class NAZARA_API NzOpenGL
{ {
public:
enum FormatType enum FormatType
{ {
FormatType_RenderBuffer, FormatType_RenderBuffer,
// FormatType_MultisampleTexture, // FormatType_MultisampleTexture,
FormatType_Texture FormatType_Texture
}; };
@ -59,36 +60,36 @@ namespace NzOpenGL
GLint internalFormat; GLint internalFormat;
}; };
NzOpenGLFunc GetEntry(const NzString& entryPoint); static NzOpenGLFunc GetEntry(const NzString& entryPoint);
unsigned int GetVersion(); static unsigned int GetVersion();
bool Initialize(); static bool Initialize();
bool IsSupported(nzOpenGLExtension extension); static bool IsSupported(nzOpenGLExtension extension);
bool IsSupported(const NzString& string); static bool IsSupported(const NzString& string);
bool TranslateFormat(nzPixelFormat pixelFormat, Format* format, FormatType target); static bool TranslateFormat(nzPixelFormat pixelFormat, Format* format, FormatType target);
void Uninitialize(); static void Uninitialize();
extern GLenum Attachment[nzAttachmentPoint_Max+1]; static GLenum Attachment[nzAttachmentPoint_Max+1];
extern nzUInt8 AttributeIndex[nzElementUsage_Max+1]; static nzUInt8 AttributeIndex[nzElementUsage_Max+1];
extern GLenum BlendFunc[nzBlendFunc_Max+1]; static GLenum BlendFunc[nzBlendFunc_Max+1];
extern GLenum BufferLock[nzBufferAccess_Max+1]; static GLenum BufferLock[nzBufferAccess_Max+1];
extern GLenum BufferLockRange[nzBufferAccess_Max+1]; static GLenum BufferLockRange[nzBufferAccess_Max+1];
extern GLenum BufferTarget[nzBufferType_Max+1]; static GLenum BufferTarget[nzBufferType_Max+1];
extern GLenum BufferTargetBinding[nzBufferType_Max+1]; static GLenum BufferTargetBinding[nzBufferType_Max+1];
extern GLenum BufferUsage[nzBufferUsage_Max+1]; static GLenum BufferUsage[nzBufferUsage_Max+1];
extern GLenum CubemapFace[6]; // Un cube possède six faces et ça n'est pas prêt de changer static GLenum CubemapFace[6]; // Un cube possède six faces et ça n'est pas prêt de changer
extern GLenum ElementType[nzElementType_Max+1]; static GLenum ElementType[nzElementType_Max+1];
extern GLenum FaceCulling[nzFaceCulling_Max+1]; static GLenum FaceCulling[nzFaceCulling_Max+1];
extern GLenum FaceFilling[nzFaceFilling_Max+1]; static GLenum FaceFilling[nzFaceFilling_Max+1];
extern GLenum PrimitiveType[nzPrimitiveType_Max+1]; static GLenum PrimitiveType[nzPrimitiveType_Max+1];
extern GLenum RendererComparison[nzRendererComparison_Max+1]; static GLenum RendererComparison[nzRendererComparison_Max+1];
extern GLenum RendererParameter[nzRendererParameter_Max+1]; static GLenum RendererParameter[nzRendererParameter_Max+1];
extern GLenum ShaderType[nzShaderType_Max+1]; static GLenum ShaderType[nzShaderType_Max+1];
extern GLenum StencilOperation[nzStencilOperation_Max+1]; static GLenum StencilOperation[nzStencilOperation_Max+1];
extern GLenum TextureTarget[nzImageType_Max+1]; static GLenum TextureTarget[nzImageType_Max+1];
extern GLenum TextureTargetBinding[nzImageType_Max+1]; static GLenum TextureTargetBinding[nzImageType_Max+1];
extern GLenum TextureTargetProxy[nzImageType_Max+1]; static GLenum TextureTargetProxy[nzImageType_Max+1];
extern GLenum TextureWrapMode[nzTextureWrap_Max+1]; static GLenum TextureWrapMode[nzTextureWrap_Max+1];
} };
NAZARA_API extern PFNGLACTIVETEXTUREPROC glActiveTexture; NAZARA_API extern PFNGLACTIVETEXTUREPROC glActiveTexture;
NAZARA_API extern PFNGLATTACHSHADERPROC glAttachShader; NAZARA_API extern PFNGLATTACHSHADERPROC glAttachShader;

View File

@ -106,20 +106,18 @@ namespace
} }
} }
namespace NzOpenGL NzOpenGLFunc NzOpenGL::GetEntry(const NzString& entryPoint)
{ {
NzOpenGLFunc GetEntry(const NzString& entryPoint)
{
return LoadEntry(entryPoint.GetConstBuffer(), false); return LoadEntry(entryPoint.GetConstBuffer(), false);
} }
unsigned int GetVersion() unsigned int NzOpenGL::GetVersion()
{ {
return openGLversion; return openGLversion;
} }
bool Initialize() bool NzOpenGL::Initialize()
{ {
if (!LoadLibrary()) if (!LoadLibrary())
{ {
NazaraError("Failed to load OpenGL library"); NazaraError("Failed to load OpenGL library");
@ -554,20 +552,20 @@ namespace NzOpenGL
NzContextParameters::defaultShareContext = NzContext::GetReference(); NzContextParameters::defaultShareContext = NzContext::GetReference();
return true; return true;
} }
bool IsSupported(nzOpenGLExtension extension) bool NzOpenGL::IsSupported(nzOpenGLExtension extension)
{ {
return openGLextensions[extension]; return openGLextensions[extension];
} }
bool IsSupported(const NzString& string) bool NzOpenGL::IsSupported(const NzString& string)
{ {
return openGLextensionSet.find(string) != openGLextensionSet.end(); return openGLextensionSet.find(string) != openGLextensionSet.end();
} }
bool TranslateFormat(nzPixelFormat pixelFormat, Format* format, FormatType type) bool NzOpenGL::TranslateFormat(nzPixelFormat pixelFormat, Format* format, FormatType type)
{ {
switch (pixelFormat) switch (pixelFormat)
{ {
case nzPixelFormat_BGR8: case nzPixelFormat_BGR8:
@ -702,10 +700,10 @@ namespace NzOpenGL
NazaraError("Invalid pixel format"); NazaraError("Invalid pixel format");
return false; return false;
} }
void Uninitialize() void NzOpenGL::Uninitialize()
{ {
NzContext::Uninitialize(); NzContext::Uninitialize();
for (bool& ext : openGLextensions) for (bool& ext : openGLextensions)
@ -715,28 +713,28 @@ namespace NzOpenGL
openGLversion = 0; openGLversion = 0;
UnloadLibrary(); UnloadLibrary();
} }
GLenum Attachment[nzAttachmentPoint_Max+1] = GLenum NzOpenGL::Attachment[nzAttachmentPoint_Max+1] =
{ {
GL_COLOR_ATTACHMENT0, // nzAttachmentPoint_Color GL_COLOR_ATTACHMENT0, // nzAttachmentPoint_Color
GL_DEPTH_ATTACHMENT, // nzAttachmentPoint_Depth GL_DEPTH_ATTACHMENT, // nzAttachmentPoint_Depth
GL_DEPTH_STENCIL_ATTACHMENT, // nzAttachmentPoint_DepthStencil GL_DEPTH_STENCIL_ATTACHMENT, // nzAttachmentPoint_DepthStencil
GL_STENCIL_ATTACHMENT // nzAttachmentPoint_Stencil GL_STENCIL_ATTACHMENT // nzAttachmentPoint_Stencil
}; };
nzUInt8 AttributeIndex[nzElementUsage_Max+1] = nzUInt8 NzOpenGL::AttributeIndex[nzElementUsage_Max+1] =
{ {
2, // nzElementUsage_Diffuse 2, // nzElementUsage_Diffuse
1, // nzElementUsage_Normal 1, // nzElementUsage_Normal
0, // nzElementUsage_Position 0, // nzElementUsage_Position
3, // nzElementUsage_Tangent 3, // nzElementUsage_Tangent
4 // nzElementUsage_TexCoord (Doit être le dernier de la liste car extensible) 4 // nzElementUsage_TexCoord (Doit être le dernier de la liste car extensible)
}; };
GLenum BlendFunc[nzBlendFunc_Max+1] = GLenum NzOpenGL::BlendFunc[nzBlendFunc_Max+1] =
{ {
GL_DST_ALPHA, // nzBlendFunc_DestAlpha GL_DST_ALPHA, // nzBlendFunc_DestAlpha
GL_DST_COLOR, // nzBlendFunc_DestColor GL_DST_COLOR, // nzBlendFunc_DestColor
GL_SRC_ALPHA, // nzBlendFunc_SrcAlpha GL_SRC_ALPHA, // nzBlendFunc_SrcAlpha
@ -747,57 +745,57 @@ namespace NzOpenGL
GL_ONE_MINUS_SRC_COLOR, // nzBlendFunc_InvSrcColor GL_ONE_MINUS_SRC_COLOR, // nzBlendFunc_InvSrcColor
GL_ONE, // nzBlendFunc_One GL_ONE, // nzBlendFunc_One
GL_ZERO // nzBlendFunc_Zero GL_ZERO // nzBlendFunc_Zero
}; };
GLenum BufferLock[nzBufferAccess_Max+1] = GLenum NzOpenGL::BufferLock[nzBufferAccess_Max+1] =
{ {
GL_WRITE_ONLY, // nzBufferAccess_DiscardAndWrite GL_WRITE_ONLY, // nzBufferAccess_DiscardAndWrite
GL_READ_ONLY, // nzBufferAccess_ReadOnly GL_READ_ONLY, // nzBufferAccess_ReadOnly
GL_READ_WRITE, // nzBufferAccess_ReadWrite GL_READ_WRITE, // nzBufferAccess_ReadWrite
GL_WRITE_ONLY // nzBufferAccess_WriteOnly GL_WRITE_ONLY // nzBufferAccess_WriteOnly
}; };
GLenum BufferLockRange[nzBufferAccess_Max+1] = GLenum NzOpenGL::BufferLockRange[nzBufferAccess_Max+1] =
{ {
GL_MAP_INVALIDATE_BUFFER_BIT | GL_MAP_WRITE_BIT, // nzBufferAccess_DiscardAndWrite GL_MAP_INVALIDATE_BUFFER_BIT | GL_MAP_WRITE_BIT, // nzBufferAccess_DiscardAndWrite
GL_MAP_READ_BIT, // nzBufferAccess_ReadOnly GL_MAP_READ_BIT, // nzBufferAccess_ReadOnly
GL_MAP_READ_BIT | GL_MAP_WRITE_BIT, // nzBufferAccess_ReadWrite GL_MAP_READ_BIT | GL_MAP_WRITE_BIT, // nzBufferAccess_ReadWrite
GL_MAP_WRITE_BIT // nzBufferAccess_WriteOnly GL_MAP_WRITE_BIT // nzBufferAccess_WriteOnly
}; };
GLenum BufferTarget[nzBufferType_Max+1] = GLenum NzOpenGL::BufferTarget[nzBufferType_Max+1] =
{ {
GL_ELEMENT_ARRAY_BUFFER, // nzBufferType_Index, GL_ELEMENT_ARRAY_BUFFER, // nzBufferType_Index,
GL_ARRAY_BUFFER, // nzBufferType_Vertex GL_ARRAY_BUFFER, // nzBufferType_Vertex
}; };
GLenum BufferTargetBinding[nzBufferType_Max+1] = GLenum NzOpenGL::BufferTargetBinding[nzBufferType_Max+1] =
{ {
GL_ELEMENT_ARRAY_BUFFER_BINDING, // nzBufferType_Index, GL_ELEMENT_ARRAY_BUFFER_BINDING, // nzBufferType_Index,
GL_ARRAY_BUFFER_BINDING, // nzBufferType_Vertex GL_ARRAY_BUFFER_BINDING, // nzBufferType_Vertex
}; };
GLenum BufferUsage[nzBufferUsage_Max+1] = GLenum NzOpenGL::BufferUsage[nzBufferUsage_Max+1] =
{ {
// J'ai choisi DYNAMIC à la place de STREAM car DYNAMIC semble plus adapté au profil "une mise à jour pour quelques rendus" // J'ai choisi DYNAMIC à la place de STREAM car DYNAMIC semble plus adapté au profil "une mise à jour pour quelques rendus"
// Ce qui est je pense le scénario qui arrivera le plus souvent (Prévoir une option pour permettre d'utiliser le STREAM_DRAW ?) // Ce qui est je pense le scénario qui arrivera le plus souvent (Prévoir une option pour permettre d'utiliser le STREAM_DRAW ?)
// Source: http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=160839 // Source: http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=160839
GL_DYNAMIC_DRAW, // nzBufferUsage_Dynamic GL_DYNAMIC_DRAW, // nzBufferUsage_Dynamic
GL_STATIC_DRAW // nzBufferUsage_Static GL_STATIC_DRAW // nzBufferUsage_Static
}; };
GLenum CubemapFace[6] = GLenum NzOpenGL::CubemapFace[6] =
{ {
GL_TEXTURE_CUBE_MAP_POSITIVE_X, // nzCubemapFace_PositiveX GL_TEXTURE_CUBE_MAP_POSITIVE_X, // nzCubemapFace_PositiveX
GL_TEXTURE_CUBE_MAP_NEGATIVE_X, // nzCubemapFace_NegativeX GL_TEXTURE_CUBE_MAP_NEGATIVE_X, // nzCubemapFace_NegativeX
GL_TEXTURE_CUBE_MAP_POSITIVE_Y, // nzCubemapFace_PositiveY GL_TEXTURE_CUBE_MAP_POSITIVE_Y, // nzCubemapFace_PositiveY
GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, // nzCubemapFace_NegativeY GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, // nzCubemapFace_NegativeY
GL_TEXTURE_CUBE_MAP_POSITIVE_Z, // nzCubemapFace_PositiveZ GL_TEXTURE_CUBE_MAP_POSITIVE_Z, // nzCubemapFace_PositiveZ
GL_TEXTURE_CUBE_MAP_NEGATIVE_Z // nzCubemapFace_NegativeZ GL_TEXTURE_CUBE_MAP_NEGATIVE_Z // nzCubemapFace_NegativeZ
}; };
GLenum ElementType[nzElementType_Max+1] = GLenum NzOpenGL::ElementType[nzElementType_Max+1] =
{ {
GL_UNSIGNED_BYTE, // nzElementType_Color GL_UNSIGNED_BYTE, // nzElementType_Color
GL_DOUBLE, // nzElementType_Double1 GL_DOUBLE, // nzElementType_Double1
GL_DOUBLE, // nzElementType_Double2 GL_DOUBLE, // nzElementType_Double2
@ -807,34 +805,34 @@ namespace NzOpenGL
GL_FLOAT, // nzElementType_Float2 GL_FLOAT, // nzElementType_Float2
GL_FLOAT, // nzElementType_Float3 GL_FLOAT, // nzElementType_Float3
GL_FLOAT // nzElementType_Float4 GL_FLOAT // nzElementType_Float4
}; };
GLenum FaceCulling[nzFaceCulling_Max+1] = GLenum NzOpenGL::FaceCulling[nzFaceCulling_Max+1] =
{ {
GL_BACK, // nzFaceCulling_Back GL_BACK, // nzFaceCulling_Back
GL_FRONT, // nzFaceCulling_Front GL_FRONT, // nzFaceCulling_Front
GL_FRONT_AND_BACK // nzFaceCulling_FrontAndBack GL_FRONT_AND_BACK // nzFaceCulling_FrontAndBack
}; };
GLenum FaceFilling[nzFaceFilling_Max+1] = GLenum NzOpenGL::FaceFilling[nzFaceFilling_Max+1] =
{ {
GL_POINT, // nzFaceFilling_Point GL_POINT, // nzFaceFilling_Point
GL_LINE, // nzFaceFilling_Line GL_LINE, // nzFaceFilling_Line
GL_FILL // nzFaceFilling_Fill GL_FILL // nzFaceFilling_Fill
}; };
GLenum PrimitiveType[nzPrimitiveType_Max+1] = GLenum NzOpenGL::PrimitiveType[nzPrimitiveType_Max+1] =
{ {
GL_LINES, // nzPrimitiveType_LineList, GL_LINES, // nzPrimitiveType_LineList,
GL_LINE_STRIP, // nzPrimitiveType_LineStrip, GL_LINE_STRIP, // nzPrimitiveType_LineStrip,
GL_POINTS, // nzPrimitiveType_PointList, GL_POINTS, // nzPrimitiveType_PointList,
GL_TRIANGLES, // nzPrimitiveType_TriangleList, GL_TRIANGLES, // nzPrimitiveType_TriangleList,
GL_TRIANGLE_STRIP, // nzPrimitiveType_TriangleStrip, GL_TRIANGLE_STRIP, // nzPrimitiveType_TriangleStrip,
GL_TRIANGLE_FAN // nzPrimitiveType_TriangleFan GL_TRIANGLE_FAN // nzPrimitiveType_TriangleFan
}; };
GLenum RendererComparison[nzRendererComparison_Max+1] = GLenum NzOpenGL::RendererComparison[nzRendererComparison_Max+1] =
{ {
GL_ALWAYS, // nzRendererComparison_Always GL_ALWAYS, // nzRendererComparison_Always
GL_EQUAL, // nzRendererComparison_Equal GL_EQUAL, // nzRendererComparison_Equal
GL_GREATER, // nzRendererComparison_Greater GL_GREATER, // nzRendererComparison_Greater
@ -842,27 +840,27 @@ namespace NzOpenGL
GL_LESS, // nzRendererComparison_Less GL_LESS, // nzRendererComparison_Less
GL_LEQUAL, // nzRendererComparison_LessOrEqual GL_LEQUAL, // nzRendererComparison_LessOrEqual
GL_NEVER // nzRendererComparison_Never GL_NEVER // nzRendererComparison_Never
}; };
GLenum RendererParameter[nzRendererParameter_Max+1] = GLenum NzOpenGL::RendererParameter[nzRendererParameter_Max+1] =
{ {
GL_BLEND, // nzRendererParameter_Blend GL_BLEND, // nzRendererParameter_Blend
GL_NONE, // nzRendererParameter_ColorWrite GL_NONE, // nzRendererParameter_ColorWrite
GL_DEPTH_TEST, // nzRendererParameter_DepthTest GL_DEPTH_TEST, // nzRendererParameter_DepthTest
GL_NONE, // nzRendererParameter_DepthWrite GL_NONE, // nzRendererParameter_DepthWrite
GL_CULL_FACE, // nzRendererParameter_FaceCulling GL_CULL_FACE, // nzRendererParameter_FaceCulling
GL_STENCIL_TEST // nzRendererParameter_Stencil GL_STENCIL_TEST // nzRendererParameter_Stencil
}; };
GLenum ShaderType[nzShaderType_Max+1] = GLenum NzOpenGL::ShaderType[nzShaderType_Max+1] =
{ {
GL_FRAGMENT_SHADER, // nzShaderType_Fragment GL_FRAGMENT_SHADER, // nzShaderType_Fragment
GL_GEOMETRY_SHADER, // nzShaderType_Geometry GL_GEOMETRY_SHADER, // nzShaderType_Geometry
GL_VERTEX_SHADER // nzShaderType_Vertex GL_VERTEX_SHADER // nzShaderType_Vertex
}; };
GLenum StencilOperation[nzStencilOperation_Max+1] = GLenum NzOpenGL::StencilOperation[nzStencilOperation_Max+1] =
{ {
GL_DECR, // nzStencilOperation_Decrement GL_DECR, // nzStencilOperation_Decrement
GL_DECR_WRAP, // nzStencilOperation_DecrementToSaturation GL_DECR_WRAP, // nzStencilOperation_DecrementToSaturation
GL_INCR, // nzStencilOperation_Increment GL_INCR, // nzStencilOperation_Increment
@ -871,44 +869,43 @@ namespace NzOpenGL
GL_KEEP, // nzStencilOperation_Keep GL_KEEP, // nzStencilOperation_Keep
GL_REPLACE, // nzStencilOperation_Replace GL_REPLACE, // nzStencilOperation_Replace
GL_ZERO // nzStencilOperation_Zero GL_ZERO // nzStencilOperation_Zero
}; };
GLenum TextureTarget[nzImageType_Max+1] = GLenum NzOpenGL::TextureTarget[nzImageType_Max+1] =
{ {
GL_TEXTURE_1D, // nzImageType_1D GL_TEXTURE_1D, // nzImageType_1D
GL_TEXTURE_1D_ARRAY, // nzImageType_1D_Array GL_TEXTURE_1D_ARRAY, // nzImageType_1D_Array
GL_TEXTURE_2D, // nzImageType_2D GL_TEXTURE_2D, // nzImageType_2D
GL_TEXTURE_2D_ARRAY, // nzImageType_2D_Array GL_TEXTURE_2D_ARRAY, // nzImageType_2D_Array
GL_TEXTURE_3D, // nzImageType_3D GL_TEXTURE_3D, // nzImageType_3D
GL_TEXTURE_CUBE_MAP // nzImageType_Cubemap GL_TEXTURE_CUBE_MAP // nzImageType_Cubemap
}; };
GLenum TextureTargetBinding[nzImageType_Max+1] = GLenum NzOpenGL::TextureTargetBinding[nzImageType_Max+1] =
{ {
GL_TEXTURE_BINDING_1D, // nzImageType_1D GL_TEXTURE_BINDING_1D, // nzImageType_1D
GL_TEXTURE_BINDING_1D_ARRAY, // nzImageType_1D_Array GL_TEXTURE_BINDING_1D_ARRAY, // nzImageType_1D_Array
GL_TEXTURE_BINDING_2D, // nzImageType_2D GL_TEXTURE_BINDING_2D, // nzImageType_2D
GL_TEXTURE_BINDING_2D_ARRAY, // nzImageType_2D_Array GL_TEXTURE_BINDING_2D_ARRAY, // nzImageType_2D_Array
GL_TEXTURE_BINDING_3D, // nzImageType_3D GL_TEXTURE_BINDING_3D, // nzImageType_3D
GL_TEXTURE_BINDING_CUBE_MAP // nzImageType_Cubemap GL_TEXTURE_BINDING_CUBE_MAP // nzImageType_Cubemap
}; };
GLenum TextureTargetProxy[nzImageType_Max+1] = GLenum NzOpenGL::TextureTargetProxy[nzImageType_Max+1] =
{ {
GL_PROXY_TEXTURE_1D, // nzImageType_1D GL_PROXY_TEXTURE_1D, // nzImageType_1D
GL_PROXY_TEXTURE_1D_ARRAY, // nzImageType_1D_Array GL_PROXY_TEXTURE_1D_ARRAY, // nzImageType_1D_Array
GL_PROXY_TEXTURE_2D, // nzImageType_2D GL_PROXY_TEXTURE_2D, // nzImageType_2D
GL_PROXY_TEXTURE_2D_ARRAY, // nzImageType_2D_Array GL_PROXY_TEXTURE_2D_ARRAY, // nzImageType_2D_Array
GL_PROXY_TEXTURE_3D, // nzImageType_3D GL_PROXY_TEXTURE_3D, // nzImageType_3D
GL_PROXY_TEXTURE_CUBE_MAP // nzImageType_Cubemap GL_PROXY_TEXTURE_CUBE_MAP // nzImageType_Cubemap
}; };
GLenum TextureWrapMode[nzTextureWrap_Max+1] = GLenum NzOpenGL::TextureWrapMode[nzTextureWrap_Max+1] =
{ {
GL_CLAMP_TO_EDGE, // nzTextureWrap_Clamp GL_CLAMP_TO_EDGE, // nzTextureWrap_Clamp
GL_REPEAT // nzTextureWrap_Repeat GL_REPEAT // nzTextureWrap_Repeat
}; };
}
PFNGLACTIVETEXTUREPROC glActiveTexture = nullptr; PFNGLACTIVETEXTUREPROC glActiveTexture = nullptr;
PFNGLATTACHSHADERPROC glAttachShader = nullptr; PFNGLATTACHSHADERPROC glAttachShader = nullptr;