Merge branch 'libglew'
This commit is contained in:
commit
6f3f271f44
@ -14,13 +14,13 @@ before_install:
|
|||||||
# Update repos
|
# Update repos
|
||||||
- sudo apt-get update -qq
|
- sudo apt-get update -qq
|
||||||
# Install dependencies
|
# Install dependencies
|
||||||
- sudo apt-get install build-essential cmake libogg-dev libvorbis-dev libopenal-dev libxxf86vm-dev libcurl4-openssl-dev libfribidi-dev libbluetooth-dev
|
- sudo apt-get install build-essential libogg-dev libvorbis-dev libopenal-dev libxxf86vm-dev libcurl4-openssl-dev libfribidi-dev libbluetooth-dev
|
||||||
# Install mesa from an other repo (a newer version is required). Quantal is not supported anymore, saucy is only supported till July 2014,
|
# Install mesa from an other repo (a newer version is required). Quantal is not supported anymore, saucy is only supported till July 2014,
|
||||||
# so we try to use trusty (precise which is what traiv uses a too old mesa version which doesn't link)
|
# so we try to use trusty (precise which is what traiv uses a too old mesa version which doesn't link)
|
||||||
- sudo apt-add-repository "deb http://archive.ubuntu.com/ubuntu trusty main restricted"
|
- sudo apt-add-repository "deb http://archive.ubuntu.com/ubuntu trusty main restricted"
|
||||||
- sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 3B4FE6ACC0B21F32
|
- sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 3B4FE6ACC0B21F32
|
||||||
- sudo apt-get update -qq
|
- sudo apt-get update -qq
|
||||||
- sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev
|
- sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev libglew-dev cmake
|
||||||
script:
|
script:
|
||||||
# First a debug build:
|
# First a debug build:
|
||||||
- mkdir build-debug
|
- mkdir build-debug
|
||||||
|
@ -149,6 +149,10 @@ endif()
|
|||||||
find_package(OpenGL REQUIRED)
|
find_package(OpenGL REQUIRED)
|
||||||
include_directories(${OPENGL_INCLUDE_DIR})
|
include_directories(${OPENGL_INCLUDE_DIR})
|
||||||
|
|
||||||
|
# Glew
|
||||||
|
find_package(GLEW REQUIRED)
|
||||||
|
include_directories(${GLEW_INCLUDE_DIR})
|
||||||
|
|
||||||
if(UNIX AND NOT APPLE)
|
if(UNIX AND NOT APPLE)
|
||||||
if(USE_XRANDR)
|
if(USE_XRANDR)
|
||||||
find_package(Xrandr REQUIRED)
|
find_package(Xrandr REQUIRED)
|
||||||
@ -269,7 +273,8 @@ target_link_libraries(supertuxkart
|
|||||||
${CURL_LIBRARIES}
|
${CURL_LIBRARIES}
|
||||||
${OGGVORBIS_LIBRARIES}
|
${OGGVORBIS_LIBRARIES}
|
||||||
${OPENAL_LIBRARY}
|
${OPENAL_LIBRARY}
|
||||||
${OPENGL_LIBRARIES})
|
${OPENGL_LIBRARIES}
|
||||||
|
${GLEW_LIBRARIES})
|
||||||
|
|
||||||
if(UNIX AND NOT APPLE)
|
if(UNIX AND NOT APPLE)
|
||||||
if(USE_XRANDR)
|
if(USE_XRANDR)
|
||||||
|
@ -1,6 +1,12 @@
|
|||||||
#ifndef GL_HEADER_HPP
|
#ifndef GL_HEADER_HPP
|
||||||
#define GL_HEADER_HPP
|
#define GL_HEADER_HPP
|
||||||
|
|
||||||
|
#define GLEW_STATIC
|
||||||
|
extern "C" {
|
||||||
|
#include <GL/glew.h>
|
||||||
|
}
|
||||||
|
#include <cinttypes>
|
||||||
|
|
||||||
#if defined(__APPLE__)
|
#if defined(__APPLE__)
|
||||||
# include <OpenGL/gl.h>
|
# include <OpenGL/gl.h>
|
||||||
# include <OpenGL/gl3.h>
|
# include <OpenGL/gl3.h>
|
||||||
@ -15,10 +21,7 @@
|
|||||||
# include <GLES/gl.h>
|
# include <GLES/gl.h>
|
||||||
#elif defined(WIN32)
|
#elif defined(WIN32)
|
||||||
# define _WINSOCKAPI_
|
# define _WINSOCKAPI_
|
||||||
// has to be included before gl.h because of WINGDIAPI and APIENTRY definitions
|
|
||||||
# include <windows.h>
|
# include <windows.h>
|
||||||
# include <GL/gl.h>
|
|
||||||
# include "../../lib/irrlicht/source/Irrlicht/glext.h"
|
|
||||||
#else
|
#else
|
||||||
#define GL_GLEXT_PROTOTYPES
|
#define GL_GLEXT_PROTOTYPES
|
||||||
#define DEBUG_OUTPUT_DECLARED
|
#define DEBUG_OUTPUT_DECLARED
|
||||||
@ -26,115 +29,11 @@
|
|||||||
# include <GL/glext.h>
|
# include <GL/glext.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WIN32
|
|
||||||
extern PFNGLGENTRANSFORMFEEDBACKSPROC glGenTransformFeedbacks;
|
|
||||||
extern PFNGLBINDTRANSFORMFEEDBACKPROC glBindTransformFeedback;
|
|
||||||
extern PFNGLDRAWTRANSFORMFEEDBACKPROC glDrawTransformFeedback;
|
|
||||||
extern PFNGLBEGINTRANSFORMFEEDBACKPROC glBeginTransformFeedback;
|
|
||||||
extern PFNGLENDTRANSFORMFEEDBACKPROC glEndTransformFeedback;
|
|
||||||
extern PFNGLTRANSFORMFEEDBACKVARYINGSPROC glTransformFeedbackVaryings;
|
|
||||||
extern PFNGLBINDBUFFERBASEPROC glBindBufferBase;
|
|
||||||
extern PFNGLGENBUFFERSPROC glGenBuffers;
|
|
||||||
extern PFNGLBINDBUFFERPROC glBindBuffer;
|
|
||||||
extern PFNGLBUFFERDATAPROC glBufferData;
|
|
||||||
extern PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer;
|
|
||||||
extern PFNGLCREATESHADERPROC glCreateShader;
|
|
||||||
extern PFNGLCOMPILESHADERPROC glCompileShader;
|
|
||||||
extern PFNGLSHADERSOURCEPROC glShaderSource;
|
|
||||||
extern PFNGLCREATEPROGRAMPROC glCreateProgram;
|
|
||||||
extern PFNGLATTACHSHADERPROC glAttachShader;
|
|
||||||
extern PFNGLLINKPROGRAMPROC glLinkProgram;
|
|
||||||
extern PFNGLUSEPROGRAMPROC glUseProgram;
|
|
||||||
extern PFNGLDELETEPROGRAMPROC glDeleteProgram;
|
|
||||||
extern PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray;
|
|
||||||
extern PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray;
|
|
||||||
extern PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation;
|
|
||||||
extern PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv;
|
|
||||||
extern PFNGLUNIFORM1FPROC glUniform1f;
|
|
||||||
extern PFNGLUNIFORM3FPROC glUniform3f;
|
|
||||||
extern PFNGLUNIFORM1FVPROC glUniform1fv;
|
|
||||||
extern PFNGLUNIFORM4FVPROC glUniform4fv;
|
|
||||||
extern PFNGLDELETESHADERPROC glDeleteShader;
|
|
||||||
extern PFNGLGETSHADERIVPROC glGetShaderiv;
|
|
||||||
extern PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog;
|
|
||||||
extern PFNGLACTIVETEXTUREPROC glActiveTexture;
|
|
||||||
extern PFNGLUNIFORM2FPROC glUniform2f;
|
|
||||||
extern PFNGLUNIFORM1IPROC glUniform1i;
|
|
||||||
extern PFNGLUNIFORM3IPROC glUniform3i;
|
|
||||||
extern PFNGLUNIFORM4IPROC glUniform4i;
|
|
||||||
extern PFNGLGETPROGRAMIVPROC glGetProgramiv;
|
|
||||||
extern PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog;
|
|
||||||
extern PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation;
|
|
||||||
extern PFNGLBINDATTRIBLOCATIONPROC glBindAttribLocation;
|
|
||||||
extern PFNGLBLENDEQUATIONPROC glBlendEquation;
|
|
||||||
extern PFNGLVERTEXATTRIBDIVISORPROC glVertexAttribDivisor;
|
|
||||||
extern PFNGLDRAWARRAYSINSTANCEDPROC glDrawArraysInstanced;
|
|
||||||
extern PFNGLDRAWELEMENTSBASEVERTEXPROC glDrawElementsBaseVertex;
|
|
||||||
extern PFNGLDRAWELEMENTSINSTANCEDPROC glDrawElementsInstanced;
|
|
||||||
extern PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glDrawElementsInstancedBaseVertex;
|
|
||||||
extern PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC glDrawElementsInstancedBaseVertexBaseInstance;
|
|
||||||
extern PFNGLDRAWELEMENTSINDIRECTPROC glDrawElementsIndirect;
|
|
||||||
extern PFNGLMULTIDRAWELEMENTSINDIRECTPROC glMultiDrawElementsIndirect;
|
|
||||||
extern PFNGLDELETEBUFFERSPROC glDeleteBuffers;
|
|
||||||
extern PFNGLGENVERTEXARRAYSPROC glGenVertexArrays;
|
|
||||||
extern PFNGLBINDVERTEXARRAYPROC glBindVertexArray;
|
|
||||||
extern PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays;
|
|
||||||
extern PFNGLTEXBUFFERPROC glTexBuffer;
|
|
||||||
extern PFNGLBUFFERSUBDATAPROC glBufferSubData;
|
|
||||||
extern PFNGLMAPBUFFERPROC glMapBuffer;
|
|
||||||
extern PFNGLMAPBUFFERRANGEPROC glMapBufferRange;
|
|
||||||
extern PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange;
|
|
||||||
extern PFNGLMEMORYBARRIERPROC glMemoryBarrier;
|
|
||||||
extern PFNGLBUFFERSTORAGEPROC glBufferStorage;
|
|
||||||
extern PFNGLUNMAPBUFFERPROC glUnmapBuffer;
|
|
||||||
extern PFNGLFENCESYNCPROC glFenceSync;
|
|
||||||
extern PFNGLCLIENTWAITSYNCPROC glClientWaitSync;
|
|
||||||
extern PFNGLVERTEXATTRIBIPOINTERPROC glVertexAttribIPointer;
|
|
||||||
extern PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers;
|
|
||||||
extern PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers;
|
|
||||||
extern PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer;
|
|
||||||
extern PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D;
|
|
||||||
extern PFNGLFRAMEBUFFERTEXTUREPROC glFramebufferTexture;
|
|
||||||
extern PFNGLTEXIMAGE3DPROC glTexImage3D;
|
|
||||||
extern PFNGLGENERATEMIPMAPPROC glGenerateMipmap;
|
|
||||||
extern PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus;
|
|
||||||
extern PFNGLTEXIMAGE2DMULTISAMPLEPROC glTexImage2DMultisample;
|
|
||||||
extern PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer;
|
|
||||||
extern PFNGLGETUNIFORMBLOCKINDEXPROC glGetUniformBlockIndex;
|
|
||||||
extern PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding;
|
|
||||||
extern PFNGLBLENDCOLORPROC glBlendColor;
|
|
||||||
extern PFNGLCOMPRESSEDTEXIMAGE2DPROC glCompressedTexImage2D;
|
|
||||||
extern PFNGLGETCOMPRESSEDTEXIMAGEPROC glGetCompressedTexImage;
|
|
||||||
extern PFNGLTEXSTORAGE1DPROC glTexStorage1D;
|
|
||||||
extern PFNGLTEXSTORAGE2DPROC glTexStorage2D;
|
|
||||||
extern PFNGLTEXSTORAGE3DPROC glTexStorage3D;
|
|
||||||
extern PFNGLBINDIMAGETEXTUREPROC glBindImageTexture;
|
|
||||||
extern PFNGLDISPATCHCOMPUTEPROC glDispatchCompute;
|
|
||||||
extern PFNGLGENSAMPLERSPROC glGenSamplers;
|
|
||||||
extern PFNGLDELETESAMPLERSPROC glDeleteSamplers;
|
|
||||||
extern PFNGLBINDSAMPLERPROC glBindSampler;
|
|
||||||
extern PFNGLSAMPLERPARAMETERFPROC glSamplerParameterf;
|
|
||||||
extern PFNGLSAMPLERPARAMETERIPROC glSamplerParameteri;
|
|
||||||
extern PFNGLGETTEXTURESAMPLERHANDLEARBPROC glGetTextureSamplerHandleARB;
|
|
||||||
extern PFNGLMAKETEXTUREHANDLERESIDENTARBPROC glMakeTextureHandleResidentARB;
|
|
||||||
extern PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC glMakeTextureHandleNonResidentARB;
|
|
||||||
extern PFNGLUNIFORMHANDLEUI64ARBPROC glUniformHandleui64ARB;
|
|
||||||
extern PFNGLISTEXTUREHANDLERESIDENTARBPROC glIsTextureHandleResidentARB;
|
|
||||||
extern PFNGLVERTEXATTRIBLPOINTERPROC glVertexAttribLPointer;
|
|
||||||
#ifdef DEBUG
|
|
||||||
extern PFNGLDEBUGMESSAGECALLBACKARBPROC glDebugMessageCallbackARB;
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef WIN32
|
|
||||||
#define Bindless_Texture_Support
|
#define Bindless_Texture_Support
|
||||||
#define Base_Instance_Support
|
#define Base_Instance_Support
|
||||||
#define Buffer_Storage
|
#define Buffer_Storage
|
||||||
#define Multi_Draw_Indirect
|
#define Multi_Draw_Indirect
|
||||||
#define Draw_Indirect
|
#define Draw_Indirect
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
struct DrawElementsIndirectCommand{
|
struct DrawElementsIndirectCommand{
|
||||||
GLuint count;
|
GLuint count;
|
||||||
|
@ -6,105 +6,8 @@
|
|||||||
#include "utils/cpp2011.hpp"
|
#include "utils/cpp2011.hpp"
|
||||||
#include "graphics/stkmesh.hpp"
|
#include "graphics/stkmesh.hpp"
|
||||||
|
|
||||||
#ifdef _IRR_WINDOWS_API_
|
|
||||||
#define IRR_OGL_LOAD_EXTENSION(X) wglGetProcAddress(reinterpret_cast<const char*>(X))
|
#include "../../lib/irrlicht/source/Irrlicht/COpenGLTexture.h"
|
||||||
PFNGLGENTRANSFORMFEEDBACKSPROC glGenTransformFeedbacks;
|
|
||||||
PFNGLBINDTRANSFORMFEEDBACKPROC glBindTransformFeedback;
|
|
||||||
PFNGLDRAWTRANSFORMFEEDBACKPROC glDrawTransformFeedback;
|
|
||||||
PFNGLBEGINTRANSFORMFEEDBACKPROC glBeginTransformFeedback;
|
|
||||||
PFNGLENDTRANSFORMFEEDBACKPROC glEndTransformFeedback;
|
|
||||||
PFNGLTRANSFORMFEEDBACKVARYINGSPROC glTransformFeedbackVaryings;
|
|
||||||
PFNGLBINDBUFFERBASEPROC glBindBufferBase;
|
|
||||||
PFNGLGENBUFFERSPROC glGenBuffers;
|
|
||||||
PFNGLBINDBUFFERPROC glBindBuffer;
|
|
||||||
PFNGLBUFFERDATAPROC glBufferData;
|
|
||||||
PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer;
|
|
||||||
PFNGLCREATESHADERPROC glCreateShader;
|
|
||||||
PFNGLCOMPILESHADERPROC glCompileShader;
|
|
||||||
PFNGLSHADERSOURCEPROC glShaderSource;
|
|
||||||
PFNGLCREATEPROGRAMPROC glCreateProgram;
|
|
||||||
PFNGLATTACHSHADERPROC glAttachShader;
|
|
||||||
PFNGLLINKPROGRAMPROC glLinkProgram;
|
|
||||||
PFNGLUSEPROGRAMPROC glUseProgram;
|
|
||||||
PFNGLDELETEPROGRAMPROC glDeleteProgram;
|
|
||||||
PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray;
|
|
||||||
PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray;
|
|
||||||
PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation;
|
|
||||||
PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv;
|
|
||||||
PFNGLUNIFORM1FPROC glUniform1f;
|
|
||||||
PFNGLUNIFORM3FPROC glUniform3f;
|
|
||||||
PFNGLDELETESHADERPROC glDeleteShader;
|
|
||||||
PFNGLGETSHADERIVPROC glGetShaderiv;
|
|
||||||
PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog;
|
|
||||||
PFNGLACTIVETEXTUREPROC glActiveTexture;
|
|
||||||
PFNGLUNIFORM2FPROC glUniform2f;
|
|
||||||
PFNGLUNIFORM1IPROC glUniform1i;
|
|
||||||
PFNGLUNIFORM3IPROC glUniform3i;
|
|
||||||
PFNGLUNIFORM4IPROC glUniform4i;
|
|
||||||
PFNGLUNIFORM1FVPROC glUniform1fv;
|
|
||||||
PFNGLUNIFORM4FVPROC glUniform4fv;
|
|
||||||
PFNGLGETPROGRAMIVPROC glGetProgramiv;
|
|
||||||
PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog;
|
|
||||||
PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation;
|
|
||||||
PFNGLBINDATTRIBLOCATIONPROC glBindAttribLocation;
|
|
||||||
PFNGLBLENDEQUATIONPROC glBlendEquation;
|
|
||||||
PFNGLVERTEXATTRIBDIVISORPROC glVertexAttribDivisor;
|
|
||||||
PFNGLDRAWARRAYSINSTANCEDPROC glDrawArraysInstanced;
|
|
||||||
PFNGLDRAWELEMENTSBASEVERTEXPROC glDrawElementsBaseVertex;
|
|
||||||
PFNGLDRAWELEMENTSINSTANCEDPROC glDrawElementsInstanced;
|
|
||||||
PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glDrawElementsInstancedBaseVertex;
|
|
||||||
PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC glDrawElementsInstancedBaseVertexBaseInstance;
|
|
||||||
PFNGLDRAWELEMENTSINDIRECTPROC glDrawElementsIndirect;
|
|
||||||
PFNGLMULTIDRAWELEMENTSINDIRECTPROC glMultiDrawElementsIndirect;
|
|
||||||
PFNGLDELETEBUFFERSPROC glDeleteBuffers;
|
|
||||||
PFNGLGENVERTEXARRAYSPROC glGenVertexArrays;
|
|
||||||
PFNGLBINDVERTEXARRAYPROC glBindVertexArray;
|
|
||||||
PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays;
|
|
||||||
PFNGLTEXBUFFERPROC glTexBuffer;
|
|
||||||
PFNGLBUFFERSUBDATAPROC glBufferSubData;
|
|
||||||
PFNGLMAPBUFFERPROC glMapBuffer;
|
|
||||||
PFNGLMAPBUFFERRANGEPROC glMapBufferRange;
|
|
||||||
PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange;
|
|
||||||
PFNGLMEMORYBARRIERPROC glMemoryBarrier;
|
|
||||||
PFNGLBUFFERSTORAGEPROC glBufferStorage;
|
|
||||||
PFNGLUNMAPBUFFERPROC glUnmapBuffer;
|
|
||||||
PFNGLFENCESYNCPROC glFenceSync;
|
|
||||||
PFNGLCLIENTWAITSYNCPROC glClientWaitSync;
|
|
||||||
PFNGLVERTEXATTRIBIPOINTERPROC glVertexAttribIPointer;
|
|
||||||
PFNGLDEBUGMESSAGECALLBACKARBPROC glDebugMessageCallbackARB;
|
|
||||||
PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers;
|
|
||||||
PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers;
|
|
||||||
PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer;
|
|
||||||
PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D;
|
|
||||||
PFNGLFRAMEBUFFERTEXTUREPROC glFramebufferTexture;
|
|
||||||
PFNGLTEXIMAGE3DPROC glTexImage3D;
|
|
||||||
PFNGLGENERATEMIPMAPPROC glGenerateMipmap;
|
|
||||||
PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus;
|
|
||||||
PFNGLTEXIMAGE2DMULTISAMPLEPROC glTexImage2DMultisample;
|
|
||||||
PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer;
|
|
||||||
PFNGLGETUNIFORMBLOCKINDEXPROC glGetUniformBlockIndex;
|
|
||||||
PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding;
|
|
||||||
PFNGLBLENDCOLORPROC glBlendColor;
|
|
||||||
PFNGLCOMPRESSEDTEXIMAGE2DPROC glCompressedTexImage2D;
|
|
||||||
PFNGLGETCOMPRESSEDTEXIMAGEPROC glGetCompressedTexImage;
|
|
||||||
PFNGLTEXSTORAGE1DPROC glTexStorage1D;
|
|
||||||
PFNGLTEXSTORAGE2DPROC glTexStorage2D;
|
|
||||||
PFNGLTEXSTORAGE3DPROC glTexStorage3D;
|
|
||||||
PFNGLBINDIMAGETEXTUREPROC glBindImageTexture;
|
|
||||||
PFNGLDISPATCHCOMPUTEPROC glDispatchCompute;
|
|
||||||
PFNGLGENSAMPLERSPROC glGenSamplers;
|
|
||||||
PFNGLDELETESAMPLERSPROC glDeleteSamplers;
|
|
||||||
PFNGLBINDSAMPLERPROC glBindSampler;
|
|
||||||
PFNGLSAMPLERPARAMETERFPROC glSamplerParameterf;
|
|
||||||
PFNGLSAMPLERPARAMETERIPROC glSamplerParameteri;
|
|
||||||
PFNGLGETSTRINGIPROC glGetStringi;
|
|
||||||
PFNGLGETTEXTURESAMPLERHANDLEARBPROC glGetTextureSamplerHandleARB;
|
|
||||||
PFNGLMAKETEXTUREHANDLERESIDENTARBPROC glMakeTextureHandleResidentARB;
|
|
||||||
PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC glMakeTextureHandleNonResidentARB;
|
|
||||||
PFNGLUNIFORMHANDLEUI64ARBPROC glUniformHandleui64ARB;
|
|
||||||
PFNGLISTEXTUREHANDLERESIDENTARBPROC glIsTextureHandleResidentARB;
|
|
||||||
PFNGLVERTEXATTRIBLPOINTERPROC glVertexAttribLPointer;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static bool is_gl_init = false;
|
static bool is_gl_init = false;
|
||||||
|
|
||||||
@ -195,106 +98,7 @@ void initGL()
|
|||||||
if (is_gl_init)
|
if (is_gl_init)
|
||||||
return;
|
return;
|
||||||
is_gl_init = true;
|
is_gl_init = true;
|
||||||
#ifdef _IRR_WINDOWS_API_
|
glewInit();
|
||||||
glGenTransformFeedbacks = (PFNGLGENTRANSFORMFEEDBACKSPROC)IRR_OGL_LOAD_EXTENSION("glGenTransformFeedbacks");
|
|
||||||
glBindTransformFeedback = (PFNGLBINDTRANSFORMFEEDBACKPROC)IRR_OGL_LOAD_EXTENSION("glBindTransformFeedback");
|
|
||||||
glDrawTransformFeedback = (PFNGLDRAWTRANSFORMFEEDBACKPROC)IRR_OGL_LOAD_EXTENSION("glDrawTransformFeedback");
|
|
||||||
glBeginTransformFeedback = (PFNGLBEGINTRANSFORMFEEDBACKPROC)IRR_OGL_LOAD_EXTENSION("glBeginTransformFeedback");
|
|
||||||
glEndTransformFeedback = (PFNGLENDTRANSFORMFEEDBACKPROC)IRR_OGL_LOAD_EXTENSION("glEndTransformFeedback");
|
|
||||||
glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)IRR_OGL_LOAD_EXTENSION("glBindBufferBase");
|
|
||||||
glGenBuffers = (PFNGLGENBUFFERSPROC)IRR_OGL_LOAD_EXTENSION("glGenBuffers");
|
|
||||||
glBindBuffer = (PFNGLBINDBUFFERPROC)IRR_OGL_LOAD_EXTENSION("glBindBuffer");
|
|
||||||
glBufferData = (PFNGLBUFFERDATAPROC)IRR_OGL_LOAD_EXTENSION("glBufferData");
|
|
||||||
glMapBuffer = (PFNGLMAPBUFFERPROC)IRR_OGL_LOAD_EXTENSION("glMapBuffer");
|
|
||||||
glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC)IRR_OGL_LOAD_EXTENSION("glMapBufferRange");
|
|
||||||
glFlushMappedBufferRange = (PFNGLFLUSHMAPPEDBUFFERRANGEPROC)IRR_OGL_LOAD_EXTENSION("glFlushMappedBufferRange");
|
|
||||||
glMemoryBarrier = (PFNGLMEMORYBARRIERPROC)IRR_OGL_LOAD_EXTENSION("glMemoryBarrier");
|
|
||||||
glBufferStorage = (PFNGLBUFFERSTORAGEPROC)IRR_OGL_LOAD_EXTENSION("glBufferStorage");
|
|
||||||
glUnmapBuffer = (PFNGLUNMAPBUFFERPROC)IRR_OGL_LOAD_EXTENSION("glUnmapBuffer");
|
|
||||||
glFenceSync = (PFNGLFENCESYNCPROC)IRR_OGL_LOAD_EXTENSION("glFenceSync");
|
|
||||||
glClientWaitSync = (PFNGLCLIENTWAITSYNCPROC)IRR_OGL_LOAD_EXTENSION("glClientWaitSync");
|
|
||||||
glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC)IRR_OGL_LOAD_EXTENSION("glVertexAttribPointer");
|
|
||||||
glCreateShader = (PFNGLCREATESHADERPROC)IRR_OGL_LOAD_EXTENSION("glCreateShader");
|
|
||||||
glCompileShader = (PFNGLCOMPILESHADERPROC)IRR_OGL_LOAD_EXTENSION("glCompileShader");
|
|
||||||
glShaderSource = (PFNGLSHADERSOURCEPROC)IRR_OGL_LOAD_EXTENSION("glShaderSource");
|
|
||||||
glCreateProgram = (PFNGLCREATEPROGRAMPROC)IRR_OGL_LOAD_EXTENSION("glCreateProgram");
|
|
||||||
glAttachShader = (PFNGLATTACHSHADERPROC)IRR_OGL_LOAD_EXTENSION("glAttachShader");
|
|
||||||
glLinkProgram = (PFNGLLINKPROGRAMPROC)IRR_OGL_LOAD_EXTENSION("glLinkProgram");
|
|
||||||
glUseProgram = (PFNGLUSEPROGRAMPROC)IRR_OGL_LOAD_EXTENSION("glUseProgram");
|
|
||||||
glDeleteProgram = (PFNGLDELETEPROGRAMPROC)IRR_OGL_LOAD_EXTENSION("glDeleteProgram");
|
|
||||||
glEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC)IRR_OGL_LOAD_EXTENSION("glEnableVertexAttribArray");
|
|
||||||
glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC)IRR_OGL_LOAD_EXTENSION("glGetUniformLocation");
|
|
||||||
glUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC)IRR_OGL_LOAD_EXTENSION("glUniformMatrix4fv");
|
|
||||||
glUniform1f = (PFNGLUNIFORM1FPROC)IRR_OGL_LOAD_EXTENSION("glUniform1f");
|
|
||||||
glUniform3f = (PFNGLUNIFORM3FPROC)IRR_OGL_LOAD_EXTENSION("glUniform3f");
|
|
||||||
glDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC)IRR_OGL_LOAD_EXTENSION("glDisableVertexAttribArray");
|
|
||||||
glDeleteShader = (PFNGLDELETESHADERPROC)IRR_OGL_LOAD_EXTENSION("glDeleteShader");
|
|
||||||
glGetShaderiv = (PFNGLGETSHADERIVPROC)IRR_OGL_LOAD_EXTENSION("glGetShaderiv");
|
|
||||||
glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC)IRR_OGL_LOAD_EXTENSION("glGetShaderInfoLog");
|
|
||||||
glActiveTexture = (PFNGLACTIVETEXTUREPROC)IRR_OGL_LOAD_EXTENSION("glActiveTexture");
|
|
||||||
glUniform2f = (PFNGLUNIFORM2FPROC)IRR_OGL_LOAD_EXTENSION("glUniform2f");
|
|
||||||
glUniform4i = (PFNGLUNIFORM4IPROC)IRR_OGL_LOAD_EXTENSION("glUniform4i");
|
|
||||||
glUniform3i = (PFNGLUNIFORM3IPROC)IRR_OGL_LOAD_EXTENSION("glUniform3i");
|
|
||||||
glUniform1i = (PFNGLUNIFORM1IPROC)IRR_OGL_LOAD_EXTENSION("glUniform1i");
|
|
||||||
glGetProgramiv = (PFNGLGETPROGRAMIVPROC)IRR_OGL_LOAD_EXTENSION("glGetProgramiv");
|
|
||||||
glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC)IRR_OGL_LOAD_EXTENSION("glGetProgramInfoLog");
|
|
||||||
glTransformFeedbackVaryings = (PFNGLTRANSFORMFEEDBACKVARYINGSPROC)IRR_OGL_LOAD_EXTENSION("glTransformFeedbackVaryings");
|
|
||||||
glGetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC)IRR_OGL_LOAD_EXTENSION("glGetAttribLocation");
|
|
||||||
glBindAttribLocation = (PFNGLBINDATTRIBLOCATIONPROC)IRR_OGL_LOAD_EXTENSION("glBindAttribLocation");
|
|
||||||
glBlendEquation = (PFNGLBLENDEQUATIONPROC)IRR_OGL_LOAD_EXTENSION("glBlendEquation");
|
|
||||||
glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISORPROC)IRR_OGL_LOAD_EXTENSION("glVertexAttribDivisor");
|
|
||||||
glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDPROC)IRR_OGL_LOAD_EXTENSION("glDrawArraysInstanced");
|
|
||||||
glDrawElementsBaseVertex = (PFNGLDRAWELEMENTSBASEVERTEXPROC)IRR_OGL_LOAD_EXTENSION("glDrawElementsBaseVertex");
|
|
||||||
glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDPROC)IRR_OGL_LOAD_EXTENSION("glDrawElementsInstanced");
|
|
||||||
glDrawElementsInstancedBaseVertex = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)IRR_OGL_LOAD_EXTENSION("glDrawElementsInstancedBaseVertex");
|
|
||||||
glDrawElementsInstancedBaseVertexBaseInstance = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC)IRR_OGL_LOAD_EXTENSION("glDrawElementsInstancedBaseVertexBaseInstance");
|
|
||||||
glDrawElementsIndirect = (PFNGLDRAWELEMENTSINDIRECTPROC)IRR_OGL_LOAD_EXTENSION("glDrawElementsIndirect");
|
|
||||||
glMultiDrawElementsIndirect = (PFNGLMULTIDRAWELEMENTSINDIRECTPROC)IRR_OGL_LOAD_EXTENSION("glMultiDrawElementsIndirect");
|
|
||||||
glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)IRR_OGL_LOAD_EXTENSION("glDeleteBuffers");
|
|
||||||
glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC)IRR_OGL_LOAD_EXTENSION("glGenVertexArrays");
|
|
||||||
glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC)IRR_OGL_LOAD_EXTENSION("glBindVertexArray");
|
|
||||||
glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC)IRR_OGL_LOAD_EXTENSION("glDeleteVertexArrays");
|
|
||||||
glTexBuffer = (PFNGLTEXBUFFERPROC)IRR_OGL_LOAD_EXTENSION("glTexBuffer");
|
|
||||||
glUniform1fv = (PFNGLUNIFORM1FVPROC)IRR_OGL_LOAD_EXTENSION("glUniform1fv");
|
|
||||||
glUniform4fv = (PFNGLUNIFORM4FVPROC)IRR_OGL_LOAD_EXTENSION("glUniform4fv");
|
|
||||||
glBufferSubData = (PFNGLBUFFERSUBDATAPROC)IRR_OGL_LOAD_EXTENSION("glBufferSubData");
|
|
||||||
glVertexAttribIPointer = (PFNGLVERTEXATTRIBIPOINTERPROC)IRR_OGL_LOAD_EXTENSION("glVertexAttribIPointer");
|
|
||||||
glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)IRR_OGL_LOAD_EXTENSION("glGenFramebuffers");
|
|
||||||
glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)IRR_OGL_LOAD_EXTENSION("glDeleteFramebuffers");
|
|
||||||
glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)IRR_OGL_LOAD_EXTENSION("glBindFramebuffer");
|
|
||||||
glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)IRR_OGL_LOAD_EXTENSION("glFramebufferTexture2D");
|
|
||||||
glFramebufferTexture = (PFNGLFRAMEBUFFERTEXTUREPROC)IRR_OGL_LOAD_EXTENSION("glFramebufferTexture");
|
|
||||||
glTexImage3D = (PFNGLTEXIMAGE3DPROC)IRR_OGL_LOAD_EXTENSION("glTexImage3D");
|
|
||||||
glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC)IRR_OGL_LOAD_EXTENSION("glGenerateMipmap");
|
|
||||||
glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)IRR_OGL_LOAD_EXTENSION("glCheckFramebufferStatus");
|
|
||||||
glTexImage2DMultisample = (PFNGLTEXIMAGE2DMULTISAMPLEPROC)IRR_OGL_LOAD_EXTENSION("glTexImage2DMultisample");
|
|
||||||
glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC)IRR_OGL_LOAD_EXTENSION("glBlitFramebuffer");
|
|
||||||
glGetUniformBlockIndex = (PFNGLGETUNIFORMBLOCKINDEXPROC)IRR_OGL_LOAD_EXTENSION("glGetUniformBlockIndex");
|
|
||||||
glUniformBlockBinding = (PFNGLUNIFORMBLOCKBINDINGPROC)IRR_OGL_LOAD_EXTENSION("glUniformBlockBinding");
|
|
||||||
glBlendColor = (PFNGLBLENDCOLORPROC)IRR_OGL_LOAD_EXTENSION("glBlendColor");
|
|
||||||
glCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)IRR_OGL_LOAD_EXTENSION("glCompressedTexImage2D");
|
|
||||||
glGetCompressedTexImage = (PFNGLGETCOMPRESSEDTEXIMAGEPROC)IRR_OGL_LOAD_EXTENSION("glGetCompressedTexImage");
|
|
||||||
glTexStorage1D = (PFNGLTEXSTORAGE1DPROC)IRR_OGL_LOAD_EXTENSION("glTexStorage1D");
|
|
||||||
glTexStorage2D = (PFNGLTEXSTORAGE2DPROC)IRR_OGL_LOAD_EXTENSION("glTexStorage2D");
|
|
||||||
glTexStorage3D = (PFNGLTEXSTORAGE3DPROC)IRR_OGL_LOAD_EXTENSION("glTexStorage3D");
|
|
||||||
glBindImageTexture = (PFNGLBINDIMAGETEXTUREPROC)IRR_OGL_LOAD_EXTENSION("glBindImageTexture");
|
|
||||||
glDispatchCompute = (PFNGLDISPATCHCOMPUTEPROC)IRR_OGL_LOAD_EXTENSION("glDispatchCompute");
|
|
||||||
glGenSamplers = (PFNGLGENSAMPLERSPROC)IRR_OGL_LOAD_EXTENSION("glGenSamplers");
|
|
||||||
glDeleteSamplers = (PFNGLDELETESAMPLERSPROC)IRR_OGL_LOAD_EXTENSION("glDeleteSamplers");
|
|
||||||
glBindSampler = (PFNGLBINDSAMPLERPROC)IRR_OGL_LOAD_EXTENSION("glBindSampler");
|
|
||||||
glSamplerParameterf = (PFNGLSAMPLERPARAMETERFPROC)IRR_OGL_LOAD_EXTENSION("glSamplerParameterf");
|
|
||||||
glSamplerParameteri = (PFNGLSAMPLERPARAMETERIPROC)IRR_OGL_LOAD_EXTENSION("glSamplerParameteri");
|
|
||||||
glGetStringi = (PFNGLGETSTRINGIPROC)IRR_OGL_LOAD_EXTENSION("glGetstringi");
|
|
||||||
glGetTextureSamplerHandleARB = (PFNGLGETTEXTURESAMPLERHANDLEARBPROC)IRR_OGL_LOAD_EXTENSION("glGetTextureSamplerHandleARB");
|
|
||||||
glMakeTextureHandleResidentARB = (PFNGLMAKETEXTUREHANDLERESIDENTARBPROC)IRR_OGL_LOAD_EXTENSION("glMakeTextureHandleResidentARB");
|
|
||||||
glMakeTextureHandleNonResidentARB = (PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC)IRR_OGL_LOAD_EXTENSION("glMakeTextureHandleNonResidentARB");
|
|
||||||
glUniformHandleui64ARB = (PFNGLUNIFORMHANDLEUI64ARBPROC)IRR_OGL_LOAD_EXTENSION("glUniformHandleui64ARB");
|
|
||||||
glIsTextureHandleResidentARB = (PFNGLISTEXTUREHANDLERESIDENTARBPROC)IRR_OGL_LOAD_EXTENSION("glIsTextureHandleResidentARB");
|
|
||||||
glVertexAttribLPointer = (PFNGLVERTEXATTRIBLPOINTERPROC)IRR_OGL_LOAD_EXTENSION("glVertexAttribLPointer");
|
|
||||||
#ifdef DEBUG
|
|
||||||
glDebugMessageCallbackARB = (PFNGLDEBUGMESSAGECALLBACKARBPROC)IRR_OGL_LOAD_EXTENSION("glDebugMessageCallbackARB");
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#ifdef ARB_DEBUG_OUTPUT
|
#ifdef ARB_DEBUG_OUTPUT
|
||||||
if (glDebugMessageCallbackARB)
|
if (glDebugMessageCallbackARB)
|
||||||
glDebugMessageCallbackARB((GLDEBUGPROCARB)debugCallback, NULL);
|
glDebugMessageCallbackARB((GLDEBUGPROCARB)debugCallback, NULL);
|
||||||
@ -930,13 +734,12 @@ ScopedGPUTimer::ScopedGPUTimer(GPUTimer &t) : timer(t)
|
|||||||
if (profiler.isFrozen()) return;
|
if (profiler.isFrozen()) return;
|
||||||
if (!timer.canSubmitQuery) return;
|
if (!timer.canSubmitQuery) return;
|
||||||
#ifdef GL_TIME_ELAPSED
|
#ifdef GL_TIME_ELAPSED
|
||||||
irr::video::COpenGLDriver *gl_driver = (irr::video::COpenGLDriver *)irr_driver->getDevice()->getVideoDriver();
|
|
||||||
if (!timer.initialised)
|
if (!timer.initialised)
|
||||||
{
|
{
|
||||||
gl_driver->extGlGenQueries(1, &timer.query);
|
glGenQueries(1, &timer.query);
|
||||||
timer.initialised = true;
|
timer.initialised = true;
|
||||||
}
|
}
|
||||||
gl_driver->extGlBeginQuery(GL_TIME_ELAPSED, timer.query);
|
glBeginQuery(GL_TIME_ELAPSED, timer.query);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
ScopedGPUTimer::~ScopedGPUTimer()
|
ScopedGPUTimer::~ScopedGPUTimer()
|
||||||
@ -945,8 +748,7 @@ ScopedGPUTimer::~ScopedGPUTimer()
|
|||||||
if (profiler.isFrozen()) return;
|
if (profiler.isFrozen()) return;
|
||||||
if (!timer.canSubmitQuery) return;
|
if (!timer.canSubmitQuery) return;
|
||||||
#ifdef GL_TIME_ELAPSED
|
#ifdef GL_TIME_ELAPSED
|
||||||
irr::video::COpenGLDriver *gl_driver = (irr::video::COpenGLDriver *)irr_driver->getDevice()->getVideoDriver();
|
glEndQuery(GL_TIME_ELAPSED);
|
||||||
gl_driver->extGlEndQuery(GL_TIME_ELAPSED);
|
|
||||||
timer.canSubmitQuery = false;
|
timer.canSubmitQuery = false;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -960,11 +762,10 @@ unsigned GPUTimer::elapsedTimeus()
|
|||||||
if (!initialised)
|
if (!initialised)
|
||||||
return 0;
|
return 0;
|
||||||
GLuint result;
|
GLuint result;
|
||||||
irr::video::COpenGLDriver *gl_driver = (irr::video::COpenGLDriver *)irr_driver->getDevice()->getVideoDriver();
|
glGetQueryObjectuiv(query, GL_QUERY_RESULT_AVAILABLE, &result);
|
||||||
gl_driver->extGlGetQueryObjectuiv(query, GL_QUERY_RESULT_AVAILABLE, &result);
|
|
||||||
if (result == GL_FALSE)
|
if (result == GL_FALSE)
|
||||||
return lastResult;
|
return lastResult;
|
||||||
gl_driver->extGlGetQueryObjectuiv(query, GL_QUERY_RESULT, &result);
|
glGetQueryObjectuiv(query, GL_QUERY_RESULT, &result);
|
||||||
lastResult = result / 1000;
|
lastResult = result / 1000;
|
||||||
canSubmitQuery = true;
|
canSubmitQuery = true;
|
||||||
return result / 1000;
|
return result / 1000;
|
||||||
@ -1023,7 +824,7 @@ void FrameBuffer::Bind()
|
|||||||
glViewport(0, 0, width, height);
|
glViewport(0, 0, width, height);
|
||||||
irr::video::COpenGLDriver *gl_driver = (irr::video::COpenGLDriver*)irr_driver->getDevice()->getVideoDriver();
|
irr::video::COpenGLDriver *gl_driver = (irr::video::COpenGLDriver*)irr_driver->getDevice()->getVideoDriver();
|
||||||
GLenum bufs[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2 };
|
GLenum bufs[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2 };
|
||||||
gl_driver->extGlDrawBuffers(RenderTargets.size(), bufs);
|
glDrawBuffers(RenderTargets.size(), bufs);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FrameBuffer::Blit(const FrameBuffer &Src, FrameBuffer &Dst, GLbitfield mask, GLenum filter)
|
void FrameBuffer::Blit(const FrameBuffer &Src, FrameBuffer &Dst, GLbitfield mask, GLenum filter)
|
||||||
|
@ -7,10 +7,6 @@
|
|||||||
#include "irr_driver.hpp"
|
#include "irr_driver.hpp"
|
||||||
#include "utils/log.hpp"
|
#include "utils/log.hpp"
|
||||||
|
|
||||||
// already includes glext.h, which defines useful GL constants.
|
|
||||||
// COpenGLDriver has already loaded the extension GL functions we use (e.g glBeginQuery)
|
|
||||||
#include "../../lib/irrlicht/source/Irrlicht/COpenGLDriver.h"
|
|
||||||
|
|
||||||
|
|
||||||
void initGL();
|
void initGL();
|
||||||
GLuint LoadTFBProgram(const char * vertex_file_path, const char **varyings, unsigned varyingscount);
|
GLuint LoadTFBProgram(const char * vertex_file_path, const char **varyings, unsigned varyingscount);
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include <IParticleSystemSceneNode.h>
|
#include <IParticleSystemSceneNode.h>
|
||||||
#include "guiengine/engine.hpp"
|
#include "guiengine/engine.hpp"
|
||||||
#include "graphics/particle_emitter.hpp"
|
#include "graphics/particle_emitter.hpp"
|
||||||
|
#include "../../lib/irrlicht/source/Irrlicht/os.h"
|
||||||
#define COMPONENTCOUNT 8
|
#define COMPONENTCOUNT 8
|
||||||
|
|
||||||
scene::IParticleSystemSceneNode *ParticleSystemProxy::addParticleNode(
|
scene::IParticleSystemSceneNode *ParticleSystemProxy::addParticleNode(
|
||||||
|
@ -490,37 +490,42 @@ void IrrDriver::initDevice()
|
|||||||
m_need_srgb_workaround = true;
|
m_need_srgb_workaround = true;
|
||||||
}
|
}
|
||||||
m_glsl = (GLMajorVersion > 3 || (GLMajorVersion == 3 && GLMinorVersion >= 1));
|
m_glsl = (GLMajorVersion > 3 || (GLMajorVersion == 3 && GLMinorVersion >= 1));
|
||||||
|
initGL();
|
||||||
|
|
||||||
// Parse extensions
|
// Parse extensions
|
||||||
hasVSLayer = false;
|
hasVSLayer = false;
|
||||||
hasBaseInstance = false;
|
hasBaseInstance = false;
|
||||||
hasBuffserStorage = false;
|
hasBuffserStorage = false;
|
||||||
hasDrawIndirect = false;
|
hasDrawIndirect = false;
|
||||||
|
hasComputeShaders = false;
|
||||||
|
hasTextureStorage = false;
|
||||||
// Default false value for hasVSLayer if --no-graphics argument is used
|
// Default false value for hasVSLayer if --no-graphics argument is used
|
||||||
if (!ProfileWorld::isNoGraphics())
|
if (!ProfileWorld::isNoGraphics())
|
||||||
{
|
{
|
||||||
if (hasGLExtension("GL_AMD_vertex_shader_layer")) {
|
if (GLEW_AMD_vertex_shader_layer) {
|
||||||
hasVSLayer = true;
|
hasVSLayer = true;
|
||||||
Log::info("GLDriver", "AMD Vertex Shader Layer enabled");
|
Log::info("GLDriver", "AMD Vertex Shader Layer enabled");
|
||||||
}
|
}
|
||||||
#ifdef Buffer_Storage
|
if (GLEW_ARB_buffer_storage) {
|
||||||
if (hasGLExtension("GL_ARB_buffer_storage")) {
|
|
||||||
hasBuffserStorage = true;
|
hasBuffserStorage = true;
|
||||||
Log::info("GLDriver", "ARB Buffer Storage enabled");
|
Log::info("GLDriver", "ARB Buffer Storage enabled");
|
||||||
}
|
}
|
||||||
#endif
|
if (GLEW_ARB_base_instance) {
|
||||||
#ifdef Base_Instance_Support
|
|
||||||
if (hasGLExtension("GL_ARB_base_instance")) {
|
|
||||||
hasBaseInstance = true;
|
hasBaseInstance = true;
|
||||||
Log::info("GLDriver", "ARB Instance enabled");
|
Log::info("GLDriver", "ARB Base Instance enabled");
|
||||||
}
|
}
|
||||||
#endif
|
if (GLEW_ARB_draw_indirect) {
|
||||||
#ifdef Draw_Indirect
|
|
||||||
if (hasGLExtension("GL_ARB_draw_indirect")) {
|
|
||||||
hasDrawIndirect = true;
|
hasDrawIndirect = true;
|
||||||
Log::info("GLDriver", "ARB Draw Indirect enabled");
|
Log::info("GLDriver", "ARB Draw Indirect enabled");
|
||||||
}
|
}
|
||||||
#endif
|
if (GLEW_ARB_compute_shader) {
|
||||||
|
hasComputeShaders = true;
|
||||||
|
Log::info("GLDriver", "ARB Compute Shader enabled");
|
||||||
|
}
|
||||||
|
if (GLEW_ARB_texture_storage) {
|
||||||
|
hasTextureStorage = true;
|
||||||
|
Log::info("GLDriver", "ARB Texture Storage enabled");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -548,8 +553,7 @@ void IrrDriver::initDevice()
|
|||||||
m_mrt.clear();
|
m_mrt.clear();
|
||||||
m_mrt.reallocate(2);
|
m_mrt.reallocate(2);
|
||||||
|
|
||||||
irr::video::COpenGLDriver* gl_driver = (irr::video::COpenGLDriver*)m_device->getVideoDriver();
|
glGenQueries(1, &m_lensflare_query);
|
||||||
gl_driver->extGlGenQueries(1, &m_lensflare_query);
|
|
||||||
m_query_issued = false;
|
m_query_issued = false;
|
||||||
|
|
||||||
scene::IMesh * const sphere = m_scene_manager->getGeometryCreator()->createSphereMesh(1, 16, 16);
|
scene::IMesh * const sphere = m_scene_manager->getGeometryCreator()->createSphereMesh(1, 16, 16);
|
||||||
|
@ -203,6 +203,8 @@ private:
|
|||||||
bool hasBaseInstance;
|
bool hasBaseInstance;
|
||||||
bool hasDrawIndirect;
|
bool hasDrawIndirect;
|
||||||
bool hasBuffserStorage;
|
bool hasBuffserStorage;
|
||||||
|
bool hasComputeShaders;
|
||||||
|
bool hasTextureStorage;
|
||||||
bool m_need_ubo_workaround;
|
bool m_need_ubo_workaround;
|
||||||
bool m_need_rh_workaround;
|
bool m_need_rh_workaround;
|
||||||
bool m_need_srgb_workaround;
|
bool m_need_srgb_workaround;
|
||||||
@ -324,6 +326,16 @@ public:
|
|||||||
return hasBuffserStorage;
|
return hasBuffserStorage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool hasARBComputeShaders() const
|
||||||
|
{
|
||||||
|
return hasComputeShaders;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool hasARBTextureStorage() const
|
||||||
|
{
|
||||||
|
return hasTextureStorage;
|
||||||
|
}
|
||||||
|
|
||||||
video::SColorf getAmbientLight() const;
|
video::SColorf getAmbientLight() const;
|
||||||
|
|
||||||
struct GlowData {
|
struct GlowData {
|
||||||
|
@ -337,15 +337,12 @@ void PostProcessing::renderGaussian17TapBlur(FrameBuffer &in_fbo, FrameBuffer &a
|
|||||||
assert(in_fbo.getWidth() == auxiliary.getWidth() && in_fbo.getHeight() == auxiliary.getHeight());
|
assert(in_fbo.getWidth() == auxiliary.getWidth() && in_fbo.getHeight() == auxiliary.getHeight());
|
||||||
float inv_width = 1.0f / in_fbo.getWidth(), inv_height = 1.0f / in_fbo.getHeight();
|
float inv_width = 1.0f / in_fbo.getWidth(), inv_height = 1.0f / in_fbo.getHeight();
|
||||||
{
|
{
|
||||||
#if WIN32
|
if (irr_driver->hasARBComputeShaders())
|
||||||
if (irr_driver->getGLSLVersion() < 430)
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
auxiliary.Bind();
|
auxiliary.Bind();
|
||||||
FullScreenShader::Gaussian17TapHShader::getInstance()->SetTextureUnits(createVector<GLuint>(in_fbo.getRTT()[0], irr_driver->getFBO(FBO_LINEAR_DEPTH).getRTT()[0]));
|
FullScreenShader::Gaussian17TapHShader::getInstance()->SetTextureUnits(createVector<GLuint>(in_fbo.getRTT()[0], irr_driver->getFBO(FBO_LINEAR_DEPTH).getRTT()[0]));
|
||||||
DrawFullScreenEffect<FullScreenShader::Gaussian17TapHShader>(core::vector2df(inv_width, inv_height));
|
DrawFullScreenEffect<FullScreenShader::Gaussian17TapHShader>(core::vector2df(inv_width, inv_height));
|
||||||
}
|
}
|
||||||
#if WIN32
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -356,19 +353,15 @@ void PostProcessing::renderGaussian17TapBlur(FrameBuffer &in_fbo, FrameBuffer &a
|
|||||||
FullScreenShader::ComputeGaussian17TapHShader::getInstance()->setUniforms();
|
FullScreenShader::ComputeGaussian17TapHShader::getInstance()->setUniforms();
|
||||||
glDispatchCompute(in_fbo.getWidth() / 8, in_fbo.getHeight() / 8, 1);
|
glDispatchCompute(in_fbo.getWidth() / 8, in_fbo.getHeight() / 8, 1);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
#if WIN32
|
if (irr_driver->hasARBComputeShaders())
|
||||||
if (irr_driver->getGLSLVersion() < 430)
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
in_fbo.Bind();
|
in_fbo.Bind();
|
||||||
|
|
||||||
FullScreenShader::Gaussian17TapVShader::getInstance()->SetTextureUnits(createVector<GLuint>(auxiliary.getRTT()[0], irr_driver->getFBO(FBO_LINEAR_DEPTH).getRTT()[0]));
|
FullScreenShader::Gaussian17TapVShader::getInstance()->SetTextureUnits(createVector<GLuint>(auxiliary.getRTT()[0], irr_driver->getFBO(FBO_LINEAR_DEPTH).getRTT()[0]));
|
||||||
DrawFullScreenEffect<FullScreenShader::Gaussian17TapVShader>(core::vector2df(inv_width, inv_height));
|
DrawFullScreenEffect<FullScreenShader::Gaussian17TapVShader>(core::vector2df(inv_width, inv_height));
|
||||||
}
|
}
|
||||||
#if WIN32
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
glUseProgram(FullScreenShader::ComputeGaussian17TapVShader::getInstance()->Program);
|
glUseProgram(FullScreenShader::ComputeGaussian17TapVShader::getInstance()->Program);
|
||||||
@ -378,7 +371,6 @@ void PostProcessing::renderGaussian17TapBlur(FrameBuffer &in_fbo, FrameBuffer &a
|
|||||||
FullScreenShader::ComputeGaussian17TapVShader::getInstance()->setUniforms();
|
FullScreenShader::ComputeGaussian17TapVShader::getInstance()->setUniforms();
|
||||||
glDispatchCompute(in_fbo.getWidth() / 8, in_fbo.getHeight() / 8, 1);
|
glDispatchCompute(in_fbo.getWidth() / 8, in_fbo.getHeight() / 8, 1);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -494,29 +494,25 @@ void IrrDriver::computeSunVisibility()
|
|||||||
hasgodrays = World::getWorld()->getTrack()->hasGodRays();
|
hasgodrays = World::getWorld()->getTrack()->hasGodRays();
|
||||||
}
|
}
|
||||||
|
|
||||||
irr::video::COpenGLDriver* gl_driver = (irr::video::COpenGLDriver*)m_device->getVideoDriver();
|
if (UserConfigParams::m_light_shaft && hasgodrays)
|
||||||
if (UserConfigParams::m_light_shaft && hasgodrays)//hasflare || hasgodrays)
|
|
||||||
{
|
{
|
||||||
GLuint res = 0;
|
GLuint res = 0;
|
||||||
if (m_query_issued)
|
if (m_query_issued)
|
||||||
gl_driver->extGlGetQueryObjectuiv(m_lensflare_query, GL_QUERY_RESULT, &res);
|
glGetQueryObjectuiv(m_lensflare_query, GL_QUERY_RESULT, &res);
|
||||||
m_post_processing->setSunPixels(res);
|
m_post_processing->setSunPixels(res);
|
||||||
|
|
||||||
// Prepare the query for the next frame.
|
// Prepare the query for the next frame.
|
||||||
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
|
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
|
||||||
gl_driver->extGlBeginQuery(GL_SAMPLES_PASSED_ARB, m_lensflare_query);
|
glBeginQuery(GL_SAMPLES_PASSED_ARB, m_lensflare_query);
|
||||||
m_scene_manager->setCurrentRendertime(scene::ESNRP_SOLID);
|
m_scene_manager->setCurrentRendertime(scene::ESNRP_SOLID);
|
||||||
m_scene_manager->drawAll(scene::ESNRP_CAMERA);
|
m_scene_manager->drawAll(scene::ESNRP_CAMERA);
|
||||||
irr_driver->setPhase(GLOW_PASS);
|
irr_driver->setPhase(GLOW_PASS);
|
||||||
m_sun_interposer->render();
|
m_sun_interposer->render();
|
||||||
gl_driver->extGlEndQuery(GL_SAMPLES_PASSED_ARB);
|
glEndQuery(GL_SAMPLES_PASSED_ARB);
|
||||||
m_query_issued = true;
|
m_query_issued = true;
|
||||||
|
|
||||||
m_lensflare->setStrength(res / 4000.0f);
|
m_lensflare->setStrength(res / 4000.0f);
|
||||||
|
|
||||||
if (hasflare)
|
|
||||||
m_lensflare->OnRegisterSceneNode();
|
|
||||||
|
|
||||||
// Make sure the color mask is reset
|
// Make sure the color mask is reset
|
||||||
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
|
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
|
||||||
}
|
}
|
||||||
|
@ -29,11 +29,9 @@ static GLuint generateRTT3D(GLenum target, size_t w, size_t h, size_t d, GLint i
|
|||||||
GLuint result;
|
GLuint result;
|
||||||
glGenTextures(1, &result);
|
glGenTextures(1, &result);
|
||||||
glBindTexture(target, result);
|
glBindTexture(target, result);
|
||||||
#if WIN32
|
if (irr_driver->hasARBTextureStorage())
|
||||||
if (irr_driver->getGLSLVersion() >= 420)
|
|
||||||
glTexStorage3D(target, 1, internalFormat, w, h, d);
|
glTexStorage3D(target, 1, internalFormat, w, h, d);
|
||||||
else
|
else
|
||||||
#endif
|
|
||||||
glTexImage3D(target, 0, internalFormat, w, h, d, 0, format, type, 0);
|
glTexImage3D(target, 0, internalFormat, w, h, d, 0, format, type, 0);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -43,11 +41,9 @@ static GLuint generateRTT(const core::dimension2du &res, GLint internalFormat, G
|
|||||||
GLuint result;
|
GLuint result;
|
||||||
glGenTextures(1, &result);
|
glGenTextures(1, &result);
|
||||||
glBindTexture(GL_TEXTURE_2D, result);
|
glBindTexture(GL_TEXTURE_2D, result);
|
||||||
#if WIN32
|
if (irr_driver->hasARBTextureStorage())
|
||||||
if (irr_driver->getGLSLVersion() >= 420)
|
|
||||||
glTexStorage2D(GL_TEXTURE_2D, mipmaplevel, internalFormat, res.Width, res.Height);
|
glTexStorage2D(GL_TEXTURE_2D, mipmaplevel, internalFormat, res.Width, res.Height);
|
||||||
else
|
else
|
||||||
#endif
|
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, internalFormat, res.Width, res.Height, 0, format, type, 0);
|
glTexImage2D(GL_TEXTURE_2D, 0, internalFormat, res.Width, res.Height, 0, format, type, 0);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -1727,8 +1727,8 @@ namespace FullScreenShader
|
|||||||
|
|
||||||
ComputeGaussian17TapHShader::ComputeGaussian17TapHShader()
|
ComputeGaussian17TapHShader::ComputeGaussian17TapHShader()
|
||||||
{
|
{
|
||||||
#if WIN32
|
|
||||||
if (irr_driver->getGLSLVersion() < 420)
|
if (irr_driver->hasARBComputeShaders())
|
||||||
return;
|
return;
|
||||||
Program = LoadProgram(
|
Program = LoadProgram(
|
||||||
GL_COMPUTE_SHADER, file_manager->getAsset("shaders/bilateralH.comp").c_str());
|
GL_COMPUTE_SHADER, file_manager->getAsset("shaders/bilateralH.comp").c_str());
|
||||||
@ -1737,7 +1737,6 @@ namespace FullScreenShader
|
|||||||
TU_dest = 2;
|
TU_dest = 2;
|
||||||
AssignUniforms();
|
AssignUniforms();
|
||||||
AssignTextureUnit(Program, TexUnit(TU_source, "source"), TexUnit(TU_depth, "depth"), TexUnit(TU_dest, "dest"));
|
AssignTextureUnit(Program, TexUnit(TU_source, "source"), TexUnit(TU_depth, "depth"), TexUnit(TU_dest, "dest"));
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Gaussian6HBlurShader::Gaussian6HBlurShader()
|
Gaussian6HBlurShader::Gaussian6HBlurShader()
|
||||||
@ -1772,8 +1771,7 @@ namespace FullScreenShader
|
|||||||
|
|
||||||
ComputeGaussian17TapVShader::ComputeGaussian17TapVShader()
|
ComputeGaussian17TapVShader::ComputeGaussian17TapVShader()
|
||||||
{
|
{
|
||||||
#if WIN32
|
if (irr_driver->hasARBComputeShaders())
|
||||||
if (irr_driver->getGLSLVersion() < 420)
|
|
||||||
return;
|
return;
|
||||||
Program = LoadProgram(
|
Program = LoadProgram(
|
||||||
GL_COMPUTE_SHADER, file_manager->getAsset("shaders/bilateralV.comp").c_str());
|
GL_COMPUTE_SHADER, file_manager->getAsset("shaders/bilateralV.comp").c_str());
|
||||||
@ -1781,7 +1779,6 @@ namespace FullScreenShader
|
|||||||
TU_depth = 1;
|
TU_depth = 1;
|
||||||
TU_dest = 2;
|
TU_dest = 2;
|
||||||
AssignTextureUnit(Program, TexUnit(TU_source, "source"), TexUnit(TU_depth, "depth"), TexUnit(TU_dest, "dest"));
|
AssignTextureUnit(Program, TexUnit(TU_source, "source"), TexUnit(TU_depth, "depth"), TexUnit(TU_dest, "dest"));
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Gaussian6VBlurShader::Gaussian6VBlurShader()
|
Gaussian6VBlurShader::Gaussian6VBlurShader()
|
||||||
|
@ -20,8 +20,8 @@
|
|||||||
#define HEADER_IRR_DEBUG_DRAWER_HPP
|
#define HEADER_IRR_DEBUG_DRAWER_HPP
|
||||||
|
|
||||||
#include "btBulletDynamicsCommon.h"
|
#include "btBulletDynamicsCommon.h"
|
||||||
#include "graphics/glwrap.hpp"
|
|
||||||
|
|
||||||
|
#include <SColor.h>
|
||||||
#include "utils/vec3.hpp"
|
#include "utils/vec3.hpp"
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user