import glcxx example app to start
This commit is contained in:
parent
9f08819dc1
commit
9bad7a1d86
7
.gitignore
vendored
7
.gitignore
vendored
@ -1,4 +1,3 @@
|
||||
/build
|
||||
/.rsconscache
|
||||
/freetype2gl3
|
||||
/freetype2gl3.exe
|
||||
/build/
|
||||
/.waf*
|
||||
/.lock-waf*
|
||||
|
6
.gitmodules
vendored
Normal file
6
.gitmodules
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
[submodule "libs/glm"]
|
||||
path = libs/glm
|
||||
url = git://github.com/g-truc/glm.git
|
||||
[submodule "libs/glcxx"]
|
||||
path = libs/glcxx
|
||||
url = git://github.com/holtrop/glcxx.git
|
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,4 @@
|
||||
#include "gl3w.h"
|
||||
#include <GL3/gl3w.h>
|
||||
|
||||
#ifdef _WIN32
|
||||
#define WIN32_LEAN_AND_MEAN 1
|
||||
@ -651,6 +651,18 @@ PFNGLDEBUGMESSAGEINSERTARBPROC gl3wDebugMessageInsertARB;
|
||||
PFNGLDEBUGMESSAGECALLBACKARBPROC gl3wDebugMessageCallbackARB;
|
||||
PFNGLGETDEBUGMESSAGELOGARBPROC gl3wGetDebugMessageLogARB;
|
||||
PFNGLGETGRAPHICSRESETSTATUSARBPROC gl3wGetGraphicsResetStatusARB;
|
||||
PFNGLGETNMAPDVARBPROC gl3wGetnMapdvARB;
|
||||
PFNGLGETNMAPFVARBPROC gl3wGetnMapfvARB;
|
||||
PFNGLGETNMAPIVARBPROC gl3wGetnMapivARB;
|
||||
PFNGLGETNPIXELMAPFVARBPROC gl3wGetnPixelMapfvARB;
|
||||
PFNGLGETNPIXELMAPUIVARBPROC gl3wGetnPixelMapuivARB;
|
||||
PFNGLGETNPIXELMAPUSVARBPROC gl3wGetnPixelMapusvARB;
|
||||
PFNGLGETNPOLYGONSTIPPLEARBPROC gl3wGetnPolygonStippleARB;
|
||||
PFNGLGETNCOLORTABLEARBPROC gl3wGetnColorTableARB;
|
||||
PFNGLGETNCONVOLUTIONFILTERARBPROC gl3wGetnConvolutionFilterARB;
|
||||
PFNGLGETNSEPARABLEFILTERARBPROC gl3wGetnSeparableFilterARB;
|
||||
PFNGLGETNHISTOGRAMARBPROC gl3wGetnHistogramARB;
|
||||
PFNGLGETNMINMAXARBPROC gl3wGetnMinmaxARB;
|
||||
PFNGLGETNTEXIMAGEARBPROC gl3wGetnTexImageARB;
|
||||
PFNGLREADNPIXELSARBPROC gl3wReadnPixelsARB;
|
||||
PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC gl3wGetnCompressedTexImageARB;
|
||||
@ -673,62 +685,6 @@ PFNGLTEXSTORAGE3DPROC gl3wTexStorage3D;
|
||||
PFNGLTEXTURESTORAGE1DEXTPROC gl3wTextureStorage1DEXT;
|
||||
PFNGLTEXTURESTORAGE2DEXTPROC gl3wTextureStorage2DEXT;
|
||||
PFNGLTEXTURESTORAGE3DEXTPROC gl3wTextureStorage3DEXT;
|
||||
PFNGLDEBUGMESSAGECONTROLPROC gl3wDebugMessageControl;
|
||||
PFNGLDEBUGMESSAGEINSERTPROC gl3wDebugMessageInsert;
|
||||
PFNGLDEBUGMESSAGECALLBACKPROC gl3wDebugMessageCallback;
|
||||
PFNGLGETDEBUGMESSAGELOGPROC gl3wGetDebugMessageLog;
|
||||
PFNGLPUSHDEBUGGROUPPROC gl3wPushDebugGroup;
|
||||
PFNGLPOPDEBUGGROUPPROC gl3wPopDebugGroup;
|
||||
PFNGLOBJECTLABELPROC gl3wObjectLabel;
|
||||
PFNGLGETOBJECTLABELPROC gl3wGetObjectLabel;
|
||||
PFNGLOBJECTPTRLABELPROC gl3wObjectPtrLabel;
|
||||
PFNGLGETOBJECTPTRLABELPROC gl3wGetObjectPtrLabel;
|
||||
PFNGLCLEARBUFFERDATAPROC gl3wClearBufferData;
|
||||
PFNGLCLEARBUFFERSUBDATAPROC gl3wClearBufferSubData;
|
||||
PFNGLCLEARNAMEDBUFFERDATAEXTPROC gl3wClearNamedBufferDataEXT;
|
||||
PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC gl3wClearNamedBufferSubDataEXT;
|
||||
PFNGLDISPATCHCOMPUTEPROC gl3wDispatchCompute;
|
||||
PFNGLDISPATCHCOMPUTEINDIRECTPROC gl3wDispatchComputeIndirect;
|
||||
PFNGLCOPYIMAGESUBDATAPROC gl3wCopyImageSubData;
|
||||
PFNGLTEXTUREVIEWPROC gl3wTextureView;
|
||||
PFNGLBINDVERTEXBUFFERPROC gl3wBindVertexBuffer;
|
||||
PFNGLVERTEXATTRIBFORMATPROC gl3wVertexAttribFormat;
|
||||
PFNGLVERTEXATTRIBIFORMATPROC gl3wVertexAttribIFormat;
|
||||
PFNGLVERTEXATTRIBLFORMATPROC gl3wVertexAttribLFormat;
|
||||
PFNGLVERTEXATTRIBBINDINGPROC gl3wVertexAttribBinding;
|
||||
PFNGLVERTEXBINDINGDIVISORPROC gl3wVertexBindingDivisor;
|
||||
PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC gl3wVertexArrayBindVertexBufferEXT;
|
||||
PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC gl3wVertexArrayVertexAttribFormatEXT;
|
||||
PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC gl3wVertexArrayVertexAttribIFormatEXT;
|
||||
PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC gl3wVertexArrayVertexAttribLFormatEXT;
|
||||
PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC gl3wVertexArrayVertexAttribBindingEXT;
|
||||
PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC gl3wVertexArrayVertexBindingDivisorEXT;
|
||||
PFNGLFRAMEBUFFERPARAMETERIPROC gl3wFramebufferParameteri;
|
||||
PFNGLGETFRAMEBUFFERPARAMETERIVPROC gl3wGetFramebufferParameteriv;
|
||||
PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC gl3wNamedFramebufferParameteriEXT;
|
||||
PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC gl3wGetNamedFramebufferParameterivEXT;
|
||||
PFNGLGETINTERNALFORMATI64VPROC gl3wGetInternalformati64v;
|
||||
PFNGLINVALIDATETEXSUBIMAGEPROC gl3wInvalidateTexSubImage;
|
||||
PFNGLINVALIDATETEXIMAGEPROC gl3wInvalidateTexImage;
|
||||
PFNGLINVALIDATEBUFFERSUBDATAPROC gl3wInvalidateBufferSubData;
|
||||
PFNGLINVALIDATEBUFFERDATAPROC gl3wInvalidateBufferData;
|
||||
PFNGLINVALIDATEFRAMEBUFFERPROC gl3wInvalidateFramebuffer;
|
||||
PFNGLINVALIDATESUBFRAMEBUFFERPROC gl3wInvalidateSubFramebuffer;
|
||||
PFNGLMULTIDRAWARRAYSINDIRECTPROC gl3wMultiDrawArraysIndirect;
|
||||
PFNGLMULTIDRAWELEMENTSINDIRECTPROC gl3wMultiDrawElementsIndirect;
|
||||
PFNGLGETPROGRAMINTERFACEIVPROC gl3wGetProgramInterfaceiv;
|
||||
PFNGLGETPROGRAMRESOURCEINDEXPROC gl3wGetProgramResourceIndex;
|
||||
PFNGLGETPROGRAMRESOURCENAMEPROC gl3wGetProgramResourceName;
|
||||
PFNGLGETPROGRAMRESOURCEIVPROC gl3wGetProgramResourceiv;
|
||||
PFNGLGETPROGRAMRESOURCELOCATIONPROC gl3wGetProgramResourceLocation;
|
||||
PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC gl3wGetProgramResourceLocationIndex;
|
||||
PFNGLSHADERSTORAGEBLOCKBINDINGPROC gl3wShaderStorageBlockBinding;
|
||||
PFNGLTEXBUFFERRANGEPROC gl3wTexBufferRange;
|
||||
PFNGLTEXTUREBUFFERRANGEEXTPROC gl3wTextureBufferRangeEXT;
|
||||
PFNGLTEXSTORAGE2DMULTISAMPLEPROC gl3wTexStorage2DMultisample;
|
||||
PFNGLTEXSTORAGE3DMULTISAMPLEPROC gl3wTexStorage3DMultisample;
|
||||
PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC gl3wTextureStorage2DMultisampleEXT;
|
||||
PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC gl3wTextureStorage3DMultisampleEXT;
|
||||
|
||||
static void load_procs(void)
|
||||
{
|
||||
@ -1258,6 +1214,18 @@ static void load_procs(void)
|
||||
gl3wDebugMessageCallbackARB = (PFNGLDEBUGMESSAGECALLBACKARBPROC) get_proc("glDebugMessageCallbackARB");
|
||||
gl3wGetDebugMessageLogARB = (PFNGLGETDEBUGMESSAGELOGARBPROC) get_proc("glGetDebugMessageLogARB");
|
||||
gl3wGetGraphicsResetStatusARB = (PFNGLGETGRAPHICSRESETSTATUSARBPROC) get_proc("glGetGraphicsResetStatusARB");
|
||||
gl3wGetnMapdvARB = (PFNGLGETNMAPDVARBPROC) get_proc("glGetnMapdvARB");
|
||||
gl3wGetnMapfvARB = (PFNGLGETNMAPFVARBPROC) get_proc("glGetnMapfvARB");
|
||||
gl3wGetnMapivARB = (PFNGLGETNMAPIVARBPROC) get_proc("glGetnMapivARB");
|
||||
gl3wGetnPixelMapfvARB = (PFNGLGETNPIXELMAPFVARBPROC) get_proc("glGetnPixelMapfvARB");
|
||||
gl3wGetnPixelMapuivARB = (PFNGLGETNPIXELMAPUIVARBPROC) get_proc("glGetnPixelMapuivARB");
|
||||
gl3wGetnPixelMapusvARB = (PFNGLGETNPIXELMAPUSVARBPROC) get_proc("glGetnPixelMapusvARB");
|
||||
gl3wGetnPolygonStippleARB = (PFNGLGETNPOLYGONSTIPPLEARBPROC) get_proc("glGetnPolygonStippleARB");
|
||||
gl3wGetnColorTableARB = (PFNGLGETNCOLORTABLEARBPROC) get_proc("glGetnColorTableARB");
|
||||
gl3wGetnConvolutionFilterARB = (PFNGLGETNCONVOLUTIONFILTERARBPROC) get_proc("glGetnConvolutionFilterARB");
|
||||
gl3wGetnSeparableFilterARB = (PFNGLGETNSEPARABLEFILTERARBPROC) get_proc("glGetnSeparableFilterARB");
|
||||
gl3wGetnHistogramARB = (PFNGLGETNHISTOGRAMARBPROC) get_proc("glGetnHistogramARB");
|
||||
gl3wGetnMinmaxARB = (PFNGLGETNMINMAXARBPROC) get_proc("glGetnMinmaxARB");
|
||||
gl3wGetnTexImageARB = (PFNGLGETNTEXIMAGEARBPROC) get_proc("glGetnTexImageARB");
|
||||
gl3wReadnPixelsARB = (PFNGLREADNPIXELSARBPROC) get_proc("glReadnPixelsARB");
|
||||
gl3wGetnCompressedTexImageARB = (PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) get_proc("glGetnCompressedTexImageARB");
|
||||
@ -1280,60 +1248,4 @@ static void load_procs(void)
|
||||
gl3wTextureStorage1DEXT = (PFNGLTEXTURESTORAGE1DEXTPROC) get_proc("glTextureStorage1DEXT");
|
||||
gl3wTextureStorage2DEXT = (PFNGLTEXTURESTORAGE2DEXTPROC) get_proc("glTextureStorage2DEXT");
|
||||
gl3wTextureStorage3DEXT = (PFNGLTEXTURESTORAGE3DEXTPROC) get_proc("glTextureStorage3DEXT");
|
||||
gl3wDebugMessageControl = (PFNGLDEBUGMESSAGECONTROLPROC) get_proc("glDebugMessageControl");
|
||||
gl3wDebugMessageInsert = (PFNGLDEBUGMESSAGEINSERTPROC) get_proc("glDebugMessageInsert");
|
||||
gl3wDebugMessageCallback = (PFNGLDEBUGMESSAGECALLBACKPROC) get_proc("glDebugMessageCallback");
|
||||
gl3wGetDebugMessageLog = (PFNGLGETDEBUGMESSAGELOGPROC) get_proc("glGetDebugMessageLog");
|
||||
gl3wPushDebugGroup = (PFNGLPUSHDEBUGGROUPPROC) get_proc("glPushDebugGroup");
|
||||
gl3wPopDebugGroup = (PFNGLPOPDEBUGGROUPPROC) get_proc("glPopDebugGroup");
|
||||
gl3wObjectLabel = (PFNGLOBJECTLABELPROC) get_proc("glObjectLabel");
|
||||
gl3wGetObjectLabel = (PFNGLGETOBJECTLABELPROC) get_proc("glGetObjectLabel");
|
||||
gl3wObjectPtrLabel = (PFNGLOBJECTPTRLABELPROC) get_proc("glObjectPtrLabel");
|
||||
gl3wGetObjectPtrLabel = (PFNGLGETOBJECTPTRLABELPROC) get_proc("glGetObjectPtrLabel");
|
||||
gl3wClearBufferData = (PFNGLCLEARBUFFERDATAPROC) get_proc("glClearBufferData");
|
||||
gl3wClearBufferSubData = (PFNGLCLEARBUFFERSUBDATAPROC) get_proc("glClearBufferSubData");
|
||||
gl3wClearNamedBufferDataEXT = (PFNGLCLEARNAMEDBUFFERDATAEXTPROC) get_proc("glClearNamedBufferDataEXT");
|
||||
gl3wClearNamedBufferSubDataEXT = (PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC) get_proc("glClearNamedBufferSubDataEXT");
|
||||
gl3wDispatchCompute = (PFNGLDISPATCHCOMPUTEPROC) get_proc("glDispatchCompute");
|
||||
gl3wDispatchComputeIndirect = (PFNGLDISPATCHCOMPUTEINDIRECTPROC) get_proc("glDispatchComputeIndirect");
|
||||
gl3wCopyImageSubData = (PFNGLCOPYIMAGESUBDATAPROC) get_proc("glCopyImageSubData");
|
||||
gl3wTextureView = (PFNGLTEXTUREVIEWPROC) get_proc("glTextureView");
|
||||
gl3wBindVertexBuffer = (PFNGLBINDVERTEXBUFFERPROC) get_proc("glBindVertexBuffer");
|
||||
gl3wVertexAttribFormat = (PFNGLVERTEXATTRIBFORMATPROC) get_proc("glVertexAttribFormat");
|
||||
gl3wVertexAttribIFormat = (PFNGLVERTEXATTRIBIFORMATPROC) get_proc("glVertexAttribIFormat");
|
||||
gl3wVertexAttribLFormat = (PFNGLVERTEXATTRIBLFORMATPROC) get_proc("glVertexAttribLFormat");
|
||||
gl3wVertexAttribBinding = (PFNGLVERTEXATTRIBBINDINGPROC) get_proc("glVertexAttribBinding");
|
||||
gl3wVertexBindingDivisor = (PFNGLVERTEXBINDINGDIVISORPROC) get_proc("glVertexBindingDivisor");
|
||||
gl3wVertexArrayBindVertexBufferEXT = (PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC) get_proc("glVertexArrayBindVertexBufferEXT");
|
||||
gl3wVertexArrayVertexAttribFormatEXT = (PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC) get_proc("glVertexArrayVertexAttribFormatEXT");
|
||||
gl3wVertexArrayVertexAttribIFormatEXT = (PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC) get_proc("glVertexArrayVertexAttribIFormatEXT");
|
||||
gl3wVertexArrayVertexAttribLFormatEXT = (PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC) get_proc("glVertexArrayVertexAttribLFormatEXT");
|
||||
gl3wVertexArrayVertexAttribBindingEXT = (PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC) get_proc("glVertexArrayVertexAttribBindingEXT");
|
||||
gl3wVertexArrayVertexBindingDivisorEXT = (PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC) get_proc("glVertexArrayVertexBindingDivisorEXT");
|
||||
gl3wFramebufferParameteri = (PFNGLFRAMEBUFFERPARAMETERIPROC) get_proc("glFramebufferParameteri");
|
||||
gl3wGetFramebufferParameteriv = (PFNGLGETFRAMEBUFFERPARAMETERIVPROC) get_proc("glGetFramebufferParameteriv");
|
||||
gl3wNamedFramebufferParameteriEXT = (PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC) get_proc("glNamedFramebufferParameteriEXT");
|
||||
gl3wGetNamedFramebufferParameterivEXT = (PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC) get_proc("glGetNamedFramebufferParameterivEXT");
|
||||
gl3wGetInternalformati64v = (PFNGLGETINTERNALFORMATI64VPROC) get_proc("glGetInternalformati64v");
|
||||
gl3wInvalidateTexSubImage = (PFNGLINVALIDATETEXSUBIMAGEPROC) get_proc("glInvalidateTexSubImage");
|
||||
gl3wInvalidateTexImage = (PFNGLINVALIDATETEXIMAGEPROC) get_proc("glInvalidateTexImage");
|
||||
gl3wInvalidateBufferSubData = (PFNGLINVALIDATEBUFFERSUBDATAPROC) get_proc("glInvalidateBufferSubData");
|
||||
gl3wInvalidateBufferData = (PFNGLINVALIDATEBUFFERDATAPROC) get_proc("glInvalidateBufferData");
|
||||
gl3wInvalidateFramebuffer = (PFNGLINVALIDATEFRAMEBUFFERPROC) get_proc("glInvalidateFramebuffer");
|
||||
gl3wInvalidateSubFramebuffer = (PFNGLINVALIDATESUBFRAMEBUFFERPROC) get_proc("glInvalidateSubFramebuffer");
|
||||
gl3wMultiDrawArraysIndirect = (PFNGLMULTIDRAWARRAYSINDIRECTPROC) get_proc("glMultiDrawArraysIndirect");
|
||||
gl3wMultiDrawElementsIndirect = (PFNGLMULTIDRAWELEMENTSINDIRECTPROC) get_proc("glMultiDrawElementsIndirect");
|
||||
gl3wGetProgramInterfaceiv = (PFNGLGETPROGRAMINTERFACEIVPROC) get_proc("glGetProgramInterfaceiv");
|
||||
gl3wGetProgramResourceIndex = (PFNGLGETPROGRAMRESOURCEINDEXPROC) get_proc("glGetProgramResourceIndex");
|
||||
gl3wGetProgramResourceName = (PFNGLGETPROGRAMRESOURCENAMEPROC) get_proc("glGetProgramResourceName");
|
||||
gl3wGetProgramResourceiv = (PFNGLGETPROGRAMRESOURCEIVPROC) get_proc("glGetProgramResourceiv");
|
||||
gl3wGetProgramResourceLocation = (PFNGLGETPROGRAMRESOURCELOCATIONPROC) get_proc("glGetProgramResourceLocation");
|
||||
gl3wGetProgramResourceLocationIndex = (PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC) get_proc("glGetProgramResourceLocationIndex");
|
||||
gl3wShaderStorageBlockBinding = (PFNGLSHADERSTORAGEBLOCKBINDINGPROC) get_proc("glShaderStorageBlockBinding");
|
||||
gl3wTexBufferRange = (PFNGLTEXBUFFERRANGEPROC) get_proc("glTexBufferRange");
|
||||
gl3wTextureBufferRangeEXT = (PFNGLTEXTUREBUFFERRANGEEXTPROC) get_proc("glTextureBufferRangeEXT");
|
||||
gl3wTexStorage2DMultisample = (PFNGLTEXSTORAGE2DMULTISAMPLEPROC) get_proc("glTexStorage2DMultisample");
|
||||
gl3wTexStorage3DMultisample = (PFNGLTEXSTORAGE3DMULTISAMPLEPROC) get_proc("glTexStorage3DMultisample");
|
||||
gl3wTextureStorage2DMultisampleEXT = (PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC) get_proc("glTextureStorage2DMultisampleEXT");
|
||||
gl3wTextureStorage3DMultisampleEXT = (PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC) get_proc("glTextureStorage3DMultisampleEXT");
|
||||
}
|
@ -1,8 +1,7 @@
|
||||
#ifndef __gl3w_h_
|
||||
#define __gl3w_h_
|
||||
|
||||
//#include <GL/glcorearb.h>
|
||||
#include "glcorearb.h"
|
||||
#include <GL3/gl3.h>
|
||||
|
||||
#ifndef __gl_h_
|
||||
#define __gl_h_
|
||||
@ -544,6 +543,18 @@ extern PFNGLDEBUGMESSAGEINSERTARBPROC gl3wDebugMessageInsertARB;
|
||||
extern PFNGLDEBUGMESSAGECALLBACKARBPROC gl3wDebugMessageCallbackARB;
|
||||
extern PFNGLGETDEBUGMESSAGELOGARBPROC gl3wGetDebugMessageLogARB;
|
||||
extern PFNGLGETGRAPHICSRESETSTATUSARBPROC gl3wGetGraphicsResetStatusARB;
|
||||
extern PFNGLGETNMAPDVARBPROC gl3wGetnMapdvARB;
|
||||
extern PFNGLGETNMAPFVARBPROC gl3wGetnMapfvARB;
|
||||
extern PFNGLGETNMAPIVARBPROC gl3wGetnMapivARB;
|
||||
extern PFNGLGETNPIXELMAPFVARBPROC gl3wGetnPixelMapfvARB;
|
||||
extern PFNGLGETNPIXELMAPUIVARBPROC gl3wGetnPixelMapuivARB;
|
||||
extern PFNGLGETNPIXELMAPUSVARBPROC gl3wGetnPixelMapusvARB;
|
||||
extern PFNGLGETNPOLYGONSTIPPLEARBPROC gl3wGetnPolygonStippleARB;
|
||||
extern PFNGLGETNCOLORTABLEARBPROC gl3wGetnColorTableARB;
|
||||
extern PFNGLGETNCONVOLUTIONFILTERARBPROC gl3wGetnConvolutionFilterARB;
|
||||
extern PFNGLGETNSEPARABLEFILTERARBPROC gl3wGetnSeparableFilterARB;
|
||||
extern PFNGLGETNHISTOGRAMARBPROC gl3wGetnHistogramARB;
|
||||
extern PFNGLGETNMINMAXARBPROC gl3wGetnMinmaxARB;
|
||||
extern PFNGLGETNTEXIMAGEARBPROC gl3wGetnTexImageARB;
|
||||
extern PFNGLREADNPIXELSARBPROC gl3wReadnPixelsARB;
|
||||
extern PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC gl3wGetnCompressedTexImageARB;
|
||||
@ -566,62 +577,6 @@ extern PFNGLTEXSTORAGE3DPROC gl3wTexStorage3D;
|
||||
extern PFNGLTEXTURESTORAGE1DEXTPROC gl3wTextureStorage1DEXT;
|
||||
extern PFNGLTEXTURESTORAGE2DEXTPROC gl3wTextureStorage2DEXT;
|
||||
extern PFNGLTEXTURESTORAGE3DEXTPROC gl3wTextureStorage3DEXT;
|
||||
extern PFNGLDEBUGMESSAGECONTROLPROC gl3wDebugMessageControl;
|
||||
extern PFNGLDEBUGMESSAGEINSERTPROC gl3wDebugMessageInsert;
|
||||
extern PFNGLDEBUGMESSAGECALLBACKPROC gl3wDebugMessageCallback;
|
||||
extern PFNGLGETDEBUGMESSAGELOGPROC gl3wGetDebugMessageLog;
|
||||
extern PFNGLPUSHDEBUGGROUPPROC gl3wPushDebugGroup;
|
||||
extern PFNGLPOPDEBUGGROUPPROC gl3wPopDebugGroup;
|
||||
extern PFNGLOBJECTLABELPROC gl3wObjectLabel;
|
||||
extern PFNGLGETOBJECTLABELPROC gl3wGetObjectLabel;
|
||||
extern PFNGLOBJECTPTRLABELPROC gl3wObjectPtrLabel;
|
||||
extern PFNGLGETOBJECTPTRLABELPROC gl3wGetObjectPtrLabel;
|
||||
extern PFNGLCLEARBUFFERDATAPROC gl3wClearBufferData;
|
||||
extern PFNGLCLEARBUFFERSUBDATAPROC gl3wClearBufferSubData;
|
||||
extern PFNGLCLEARNAMEDBUFFERDATAEXTPROC gl3wClearNamedBufferDataEXT;
|
||||
extern PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC gl3wClearNamedBufferSubDataEXT;
|
||||
extern PFNGLDISPATCHCOMPUTEPROC gl3wDispatchCompute;
|
||||
extern PFNGLDISPATCHCOMPUTEINDIRECTPROC gl3wDispatchComputeIndirect;
|
||||
extern PFNGLCOPYIMAGESUBDATAPROC gl3wCopyImageSubData;
|
||||
extern PFNGLTEXTUREVIEWPROC gl3wTextureView;
|
||||
extern PFNGLBINDVERTEXBUFFERPROC gl3wBindVertexBuffer;
|
||||
extern PFNGLVERTEXATTRIBFORMATPROC gl3wVertexAttribFormat;
|
||||
extern PFNGLVERTEXATTRIBIFORMATPROC gl3wVertexAttribIFormat;
|
||||
extern PFNGLVERTEXATTRIBLFORMATPROC gl3wVertexAttribLFormat;
|
||||
extern PFNGLVERTEXATTRIBBINDINGPROC gl3wVertexAttribBinding;
|
||||
extern PFNGLVERTEXBINDINGDIVISORPROC gl3wVertexBindingDivisor;
|
||||
extern PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC gl3wVertexArrayBindVertexBufferEXT;
|
||||
extern PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC gl3wVertexArrayVertexAttribFormatEXT;
|
||||
extern PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC gl3wVertexArrayVertexAttribIFormatEXT;
|
||||
extern PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC gl3wVertexArrayVertexAttribLFormatEXT;
|
||||
extern PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC gl3wVertexArrayVertexAttribBindingEXT;
|
||||
extern PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC gl3wVertexArrayVertexBindingDivisorEXT;
|
||||
extern PFNGLFRAMEBUFFERPARAMETERIPROC gl3wFramebufferParameteri;
|
||||
extern PFNGLGETFRAMEBUFFERPARAMETERIVPROC gl3wGetFramebufferParameteriv;
|
||||
extern PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC gl3wNamedFramebufferParameteriEXT;
|
||||
extern PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC gl3wGetNamedFramebufferParameterivEXT;
|
||||
extern PFNGLGETINTERNALFORMATI64VPROC gl3wGetInternalformati64v;
|
||||
extern PFNGLINVALIDATETEXSUBIMAGEPROC gl3wInvalidateTexSubImage;
|
||||
extern PFNGLINVALIDATETEXIMAGEPROC gl3wInvalidateTexImage;
|
||||
extern PFNGLINVALIDATEBUFFERSUBDATAPROC gl3wInvalidateBufferSubData;
|
||||
extern PFNGLINVALIDATEBUFFERDATAPROC gl3wInvalidateBufferData;
|
||||
extern PFNGLINVALIDATEFRAMEBUFFERPROC gl3wInvalidateFramebuffer;
|
||||
extern PFNGLINVALIDATESUBFRAMEBUFFERPROC gl3wInvalidateSubFramebuffer;
|
||||
extern PFNGLMULTIDRAWARRAYSINDIRECTPROC gl3wMultiDrawArraysIndirect;
|
||||
extern PFNGLMULTIDRAWELEMENTSINDIRECTPROC gl3wMultiDrawElementsIndirect;
|
||||
extern PFNGLGETPROGRAMINTERFACEIVPROC gl3wGetProgramInterfaceiv;
|
||||
extern PFNGLGETPROGRAMRESOURCEINDEXPROC gl3wGetProgramResourceIndex;
|
||||
extern PFNGLGETPROGRAMRESOURCENAMEPROC gl3wGetProgramResourceName;
|
||||
extern PFNGLGETPROGRAMRESOURCEIVPROC gl3wGetProgramResourceiv;
|
||||
extern PFNGLGETPROGRAMRESOURCELOCATIONPROC gl3wGetProgramResourceLocation;
|
||||
extern PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC gl3wGetProgramResourceLocationIndex;
|
||||
extern PFNGLSHADERSTORAGEBLOCKBINDINGPROC gl3wShaderStorageBlockBinding;
|
||||
extern PFNGLTEXBUFFERRANGEPROC gl3wTexBufferRange;
|
||||
extern PFNGLTEXTUREBUFFERRANGEEXTPROC gl3wTextureBufferRangeEXT;
|
||||
extern PFNGLTEXSTORAGE2DMULTISAMPLEPROC gl3wTexStorage2DMultisample;
|
||||
extern PFNGLTEXSTORAGE3DMULTISAMPLEPROC gl3wTexStorage3DMultisample;
|
||||
extern PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC gl3wTextureStorage2DMultisampleEXT;
|
||||
extern PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC gl3wTextureStorage3DMultisampleEXT;
|
||||
|
||||
#define glCullFace gl3wCullFace
|
||||
#define glFrontFace gl3wFrontFace
|
||||
@ -1149,6 +1104,18 @@ extern PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC gl3wTextureStorage3DMultisampleEX
|
||||
#define glDebugMessageCallbackARB gl3wDebugMessageCallbackARB
|
||||
#define glGetDebugMessageLogARB gl3wGetDebugMessageLogARB
|
||||
#define glGetGraphicsResetStatusARB gl3wGetGraphicsResetStatusARB
|
||||
#define glGetnMapdvARB gl3wGetnMapdvARB
|
||||
#define glGetnMapfvARB gl3wGetnMapfvARB
|
||||
#define glGetnMapivARB gl3wGetnMapivARB
|
||||
#define glGetnPixelMapfvARB gl3wGetnPixelMapfvARB
|
||||
#define glGetnPixelMapuivARB gl3wGetnPixelMapuivARB
|
||||
#define glGetnPixelMapusvARB gl3wGetnPixelMapusvARB
|
||||
#define glGetnPolygonStippleARB gl3wGetnPolygonStippleARB
|
||||
#define glGetnColorTableARB gl3wGetnColorTableARB
|
||||
#define glGetnConvolutionFilterARB gl3wGetnConvolutionFilterARB
|
||||
#define glGetnSeparableFilterARB gl3wGetnSeparableFilterARB
|
||||
#define glGetnHistogramARB gl3wGetnHistogramARB
|
||||
#define glGetnMinmaxARB gl3wGetnMinmaxARB
|
||||
#define glGetnTexImageARB gl3wGetnTexImageARB
|
||||
#define glReadnPixelsARB gl3wReadnPixelsARB
|
||||
#define glGetnCompressedTexImageARB gl3wGetnCompressedTexImageARB
|
||||
@ -1171,62 +1138,6 @@ extern PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC gl3wTextureStorage3DMultisampleEX
|
||||
#define glTextureStorage1DEXT gl3wTextureStorage1DEXT
|
||||
#define glTextureStorage2DEXT gl3wTextureStorage2DEXT
|
||||
#define glTextureStorage3DEXT gl3wTextureStorage3DEXT
|
||||
#define glDebugMessageControl gl3wDebugMessageControl
|
||||
#define glDebugMessageInsert gl3wDebugMessageInsert
|
||||
#define glDebugMessageCallback gl3wDebugMessageCallback
|
||||
#define glGetDebugMessageLog gl3wGetDebugMessageLog
|
||||
#define glPushDebugGroup gl3wPushDebugGroup
|
||||
#define glPopDebugGroup gl3wPopDebugGroup
|
||||
#define glObjectLabel gl3wObjectLabel
|
||||
#define glGetObjectLabel gl3wGetObjectLabel
|
||||
#define glObjectPtrLabel gl3wObjectPtrLabel
|
||||
#define glGetObjectPtrLabel gl3wGetObjectPtrLabel
|
||||
#define glClearBufferData gl3wClearBufferData
|
||||
#define glClearBufferSubData gl3wClearBufferSubData
|
||||
#define glClearNamedBufferDataEXT gl3wClearNamedBufferDataEXT
|
||||
#define glClearNamedBufferSubDataEXT gl3wClearNamedBufferSubDataEXT
|
||||
#define glDispatchCompute gl3wDispatchCompute
|
||||
#define glDispatchComputeIndirect gl3wDispatchComputeIndirect
|
||||
#define glCopyImageSubData gl3wCopyImageSubData
|
||||
#define glTextureView gl3wTextureView
|
||||
#define glBindVertexBuffer gl3wBindVertexBuffer
|
||||
#define glVertexAttribFormat gl3wVertexAttribFormat
|
||||
#define glVertexAttribIFormat gl3wVertexAttribIFormat
|
||||
#define glVertexAttribLFormat gl3wVertexAttribLFormat
|
||||
#define glVertexAttribBinding gl3wVertexAttribBinding
|
||||
#define glVertexBindingDivisor gl3wVertexBindingDivisor
|
||||
#define glVertexArrayBindVertexBufferEXT gl3wVertexArrayBindVertexBufferEXT
|
||||
#define glVertexArrayVertexAttribFormatEXT gl3wVertexArrayVertexAttribFormatEXT
|
||||
#define glVertexArrayVertexAttribIFormatEXT gl3wVertexArrayVertexAttribIFormatEXT
|
||||
#define glVertexArrayVertexAttribLFormatEXT gl3wVertexArrayVertexAttribLFormatEXT
|
||||
#define glVertexArrayVertexAttribBindingEXT gl3wVertexArrayVertexAttribBindingEXT
|
||||
#define glVertexArrayVertexBindingDivisorEXT gl3wVertexArrayVertexBindingDivisorEXT
|
||||
#define glFramebufferParameteri gl3wFramebufferParameteri
|
||||
#define glGetFramebufferParameteriv gl3wGetFramebufferParameteriv
|
||||
#define glNamedFramebufferParameteriEXT gl3wNamedFramebufferParameteriEXT
|
||||
#define glGetNamedFramebufferParameterivEXT gl3wGetNamedFramebufferParameterivEXT
|
||||
#define glGetInternalformati64v gl3wGetInternalformati64v
|
||||
#define glInvalidateTexSubImage gl3wInvalidateTexSubImage
|
||||
#define glInvalidateTexImage gl3wInvalidateTexImage
|
||||
#define glInvalidateBufferSubData gl3wInvalidateBufferSubData
|
||||
#define glInvalidateBufferData gl3wInvalidateBufferData
|
||||
#define glInvalidateFramebuffer gl3wInvalidateFramebuffer
|
||||
#define glInvalidateSubFramebuffer gl3wInvalidateSubFramebuffer
|
||||
#define glMultiDrawArraysIndirect gl3wMultiDrawArraysIndirect
|
||||
#define glMultiDrawElementsIndirect gl3wMultiDrawElementsIndirect
|
||||
#define glGetProgramInterfaceiv gl3wGetProgramInterfaceiv
|
||||
#define glGetProgramResourceIndex gl3wGetProgramResourceIndex
|
||||
#define glGetProgramResourceName gl3wGetProgramResourceName
|
||||
#define glGetProgramResourceiv gl3wGetProgramResourceiv
|
||||
#define glGetProgramResourceLocation gl3wGetProgramResourceLocation
|
||||
#define glGetProgramResourceLocationIndex gl3wGetProgramResourceLocationIndex
|
||||
#define glShaderStorageBlockBinding gl3wShaderStorageBlockBinding
|
||||
#define glTexBufferRange gl3wTexBufferRange
|
||||
#define glTextureBufferRangeEXT gl3wTextureBufferRangeEXT
|
||||
#define glTexStorage2DMultisample gl3wTexStorage2DMultisample
|
||||
#define glTexStorage3DMultisample gl3wTexStorage3DMultisample
|
||||
#define glTextureStorage2DMultisampleEXT gl3wTextureStorage2DMultisampleEXT
|
||||
#define glTextureStorage3DMultisampleEXT gl3wTextureStorage3DMultisampleEXT
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
99
GLProgram.cc
99
GLProgram.cc
@ -1,99 +0,0 @@
|
||||
#include "GLProgram.h"
|
||||
#include <stdint.h>
|
||||
#include <iostream>
|
||||
|
||||
using namespace std;
|
||||
|
||||
GLProgram::GLProgram()
|
||||
{
|
||||
m_id = 0;
|
||||
}
|
||||
|
||||
GLProgram::~GLProgram()
|
||||
{
|
||||
if (m_id > 0)
|
||||
{
|
||||
glDeleteProgram(m_id);
|
||||
}
|
||||
}
|
||||
|
||||
bool GLProgram::create(const char *v_source, const char *f_source, ...)
|
||||
{
|
||||
va_list va;
|
||||
va_start(va, f_source);
|
||||
bool rv = createv(v_source, f_source, va);
|
||||
va_end(va);
|
||||
return rv;
|
||||
}
|
||||
|
||||
bool GLProgram::create(const uint8_t *v_source, const uint8_t *f_source, ...)
|
||||
{
|
||||
va_list va;
|
||||
va_start(va, f_source);
|
||||
bool rv = createv((const char *) v_source, (const char *) f_source, va);
|
||||
va_end(va);
|
||||
return rv;
|
||||
}
|
||||
|
||||
bool GLProgram::createv(const char *v_source, const char *f_source, va_list va)
|
||||
{
|
||||
if (v_source == NULL || f_source == NULL)
|
||||
return false;
|
||||
if (!m_v_shader.create(GL_VERTEX_SHADER, v_source))
|
||||
{
|
||||
cerr << "Failed vertex shader source:" << endl << v_source << endl;
|
||||
return false;
|
||||
}
|
||||
if (!m_f_shader.create(GL_FRAGMENT_SHADER, f_source))
|
||||
{
|
||||
cerr << "Failed fragment shader source:" << endl << f_source << endl;
|
||||
return false;
|
||||
}
|
||||
m_id = glCreateProgram();
|
||||
if (m_id <= 0)
|
||||
{
|
||||
cerr << "Error allocating GL program object" << endl;
|
||||
return false;
|
||||
}
|
||||
glAttachShader(m_id, m_v_shader.get_id());
|
||||
glAttachShader(m_id, m_f_shader.get_id());
|
||||
|
||||
for (;;)
|
||||
{
|
||||
const char *attribute_name = va_arg(va, const char *);
|
||||
if (attribute_name == NULL)
|
||||
break;
|
||||
GLuint attribute_index = va_arg(va, uint32_t);
|
||||
glBindAttribLocation(m_id, attribute_index, attribute_name);
|
||||
}
|
||||
|
||||
glLinkProgram(m_id);
|
||||
|
||||
GLint link_status;
|
||||
glGetProgramiv(m_id, GL_LINK_STATUS, &link_status);
|
||||
if (link_status != GL_TRUE)
|
||||
{
|
||||
GLint log_length;
|
||||
glGetProgramiv(m_id, GL_INFO_LOG_LENGTH, &log_length);
|
||||
if (log_length > 0)
|
||||
{
|
||||
char *log = new char[log_length];
|
||||
glGetProgramInfoLog(m_id, log_length, &log_length, log);
|
||||
cerr << "Program log:" << endl << log << endl;
|
||||
delete[] log;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
for (;;)
|
||||
{
|
||||
const char *uniform_name = va_arg(va, const char *);
|
||||
if (uniform_name == NULL)
|
||||
break;
|
||||
GLint loc = glGetUniformLocation(m_id, uniform_name);
|
||||
m_uniform_locations.push_back(loc);
|
||||
m_uniform_location_names[uniform_name] = loc;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
30
GLProgram.h
30
GLProgram.h
@ -1,30 +0,0 @@
|
||||
#ifndef GLPROGRAM_H
|
||||
#define GLPROGRAM_H
|
||||
|
||||
#include <stdarg.h>
|
||||
#include "GLShader.h"
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
class GLProgram
|
||||
{
|
||||
public:
|
||||
GLProgram();
|
||||
~GLProgram();
|
||||
bool create(const char *v_source, const char *f_source, ...);
|
||||
bool create(const uint8_t *v_source, const uint8_t *f_source, ...);
|
||||
bool createv(const char *v_source, const char *f_source, va_list va);
|
||||
GLuint get_id() { return m_id; }
|
||||
void use() { glUseProgram(m_id); }
|
||||
GLint uniform(int i) { return m_uniform_locations[i]; }
|
||||
GLint uniform(const std::string & s) { return m_uniform_location_names[s]; }
|
||||
protected:
|
||||
GLuint m_id;
|
||||
GLShader m_v_shader;
|
||||
GLShader m_f_shader;
|
||||
std::vector<GLint> m_uniform_locations;
|
||||
std::map<std::string, GLint> m_uniform_location_names;
|
||||
};
|
||||
|
||||
#endif
|
59
GLShader.cc
59
GLShader.cc
@ -1,59 +0,0 @@
|
||||
#include "GLShader.h"
|
||||
#include <iostream>
|
||||
|
||||
using namespace std;
|
||||
|
||||
GLShader::GLShader()
|
||||
{
|
||||
m_id = 0;
|
||||
}
|
||||
|
||||
GLShader::~GLShader()
|
||||
{
|
||||
if (m_id > 0)
|
||||
{
|
||||
glDeleteShader(m_id);
|
||||
}
|
||||
}
|
||||
|
||||
bool GLShader::create(GLenum shaderType, const char *source)
|
||||
{
|
||||
GLint status;
|
||||
|
||||
m_id = glCreateShader(shaderType);
|
||||
if (m_id > 0)
|
||||
{
|
||||
glShaderSource(m_id, 1, &source, NULL);
|
||||
|
||||
glCompileShader(m_id);
|
||||
|
||||
glGetShaderiv(m_id, GL_COMPILE_STATUS, &status);
|
||||
if (status == GL_TRUE)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
GLint log_length;
|
||||
cerr << "Error compiling ";
|
||||
switch (shaderType)
|
||||
{
|
||||
case GL_VERTEX_SHADER:
|
||||
cerr << "vertex";
|
||||
break;
|
||||
case GL_FRAGMENT_SHADER:
|
||||
cerr << "fragment";
|
||||
break;
|
||||
}
|
||||
cerr << " shader" << endl;
|
||||
glGetShaderiv(m_id, GL_INFO_LOG_LENGTH, &log_length);
|
||||
if (log_length > 0)
|
||||
{
|
||||
char * log = new char[log_length];
|
||||
glGetShaderInfoLog(m_id, log_length, &log_length, log);
|
||||
cerr << "Shader Log:" << endl << log << endl;
|
||||
delete[] log;
|
||||
}
|
||||
glDeleteShader(m_id);
|
||||
}
|
||||
return false;
|
||||
}
|
18
GLShader.h
18
GLShader.h
@ -1,18 +0,0 @@
|
||||
#ifndef GLSHADER_H
|
||||
#define GLSHADER_H
|
||||
|
||||
#include "gl3w.h"
|
||||
|
||||
class GLShader
|
||||
{
|
||||
public:
|
||||
GLShader();
|
||||
~GLShader();
|
||||
bool create(GLenum shaderType, const char *source);
|
||||
GLuint get_id() { return m_id; }
|
||||
bool valid() { return m_id > 0; }
|
||||
protected:
|
||||
GLuint m_id;
|
||||
};
|
||||
|
||||
#endif
|
14
Gemfile.lock
14
Gemfile.lock
@ -1,14 +0,0 @@
|
||||
GEM
|
||||
remote: http://rubygems.org/
|
||||
specs:
|
||||
json (1.8.1)
|
||||
rake (10.3.2)
|
||||
rscons (1.4.3)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
json
|
||||
rake
|
||||
rscons
|
20
Makefile
20
Makefile
@ -1,15 +1,11 @@
|
||||
ifeq ($(OS),Windows_NT)
|
||||
GL_LIB := opengl32
|
||||
else
|
||||
GL_LIB := GL
|
||||
endif
|
||||
CFLAGS := $(shell freetype-config --cflags) $(shell sdl2-config --cflags)
|
||||
CXXFLAGS := $(CFLAGS)
|
||||
LDFLAGS := -l$(GL_LIB) -ldl -lfreetype $(shell sdl2-config --libs) $(shell freetype-config --libs)
|
||||
|
||||
freetype2gl3: gl3w.o freetype2gl3.o GLShader.o GLProgram.o
|
||||
$(CXX) -o $@ $^ $(LDFLAGS)
|
||||
.PHONY: build
|
||||
build:
|
||||
./waf build
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
-rm -f freetype2gl3
|
||||
./waf clean
|
||||
|
||||
.PHONY: distclean
|
||||
distclean:
|
||||
./waf distclean
|
||||
|
21
Rakefile.rb
21
Rakefile.rb
@ -1,21 +0,0 @@
|
||||
require "bundler"
|
||||
Bundler.setup(:default)
|
||||
|
||||
require "rake/clean"
|
||||
require "rscons"
|
||||
|
||||
NAME = "freetype2gl3"
|
||||
|
||||
task :default do
|
||||
Rscons::Environment.new do |env|
|
||||
env.build_root = "build"
|
||||
env["LIBS"] += ["SDL2", "GL", "dl", "freetype"]
|
||||
env["CXXFLAGS"] += `freetype-config --cflags`.split(" ")
|
||||
env["LDFLAGS"] += `freetype-config --libs`.split(" ")
|
||||
env.Program("^/#{NAME}", Dir["*.{cc,c}"])
|
||||
end
|
||||
end
|
||||
|
||||
task :clean do
|
||||
Rscons.clean
|
||||
end
|
236
app.cc
Normal file
236
app.cc
Normal file
@ -0,0 +1,236 @@
|
||||
#include <SDL.h>
|
||||
#include <stdio.h>
|
||||
#include "glcxx.hpp"
|
||||
#include "GL3/gl3w.h"
|
||||
#include <iostream>
|
||||
#include "glm/glm.hpp"
|
||||
#include "glm/gtc/matrix_transform.hpp"
|
||||
|
||||
using namespace std;
|
||||
|
||||
std::shared_ptr<glcxx::Program> program;
|
||||
std::shared_ptr<glcxx::Buffer> cube_buffer;
|
||||
std::shared_ptr<glcxx::Array> cube_array;
|
||||
static struct
|
||||
{
|
||||
GLint ambient;
|
||||
GLint specular;
|
||||
GLint shininess;
|
||||
GLint tex;
|
||||
GLint projection;
|
||||
GLint modelview;
|
||||
} uniforms;
|
||||
glm::mat4 modelview;
|
||||
glm::mat4 projection;
|
||||
std::shared_ptr<glcxx::Texture> texture;
|
||||
GLubyte texture_data[16][16][4];
|
||||
|
||||
#define WIDTH 800
|
||||
#define HEIGHT 800
|
||||
|
||||
bool init(void)
|
||||
{
|
||||
glClearColor (0.0, 0.0, 0.0, 0.0);
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
glEnable(GL_CULL_FACE);
|
||||
#if 0
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
#endif
|
||||
glViewport(0, 0, WIDTH, HEIGHT);
|
||||
try
|
||||
{
|
||||
program = glcxx::Program::create(
|
||||
glcxx::Shader::create_from_file(GL_VERTEX_SHADER, "cube.v.glsl"),
|
||||
glcxx::Shader::create_from_file(GL_FRAGMENT_SHADER, "cube.f.glsl"),
|
||||
"position", 0,
|
||||
"normal", 1,
|
||||
"tex_coord", 2);
|
||||
uniforms.ambient = program->get_uniform_location("ambient");
|
||||
uniforms.specular = program->get_uniform_location("specular");
|
||||
uniforms.shininess = program->get_uniform_location("shininess");
|
||||
uniforms.tex = program->get_uniform_location("tex");
|
||||
uniforms.projection = program->get_uniform_location("projection");
|
||||
uniforms.modelview = program->get_uniform_location("modelview");
|
||||
|
||||
cube_buffer = glcxx::Buffer::create(GL_ARRAY_BUFFER, GL_STATIC_DRAW,
|
||||
{-1, -1, 1, 0, 0, 1, 0, 0,
|
||||
1, -1, 1, 0, 0, 1, 1, 0,
|
||||
1, 1, 1, 0, 0, 1, 1, 1,
|
||||
-1, 1, 1, 0, 0, 1, 0, 1});
|
||||
cube_array = glcxx::Array::create();
|
||||
cube_array->bind();
|
||||
cube_buffer->bind();
|
||||
glEnableVertexAttribArray(0);
|
||||
glEnableVertexAttribArray(1);
|
||||
glEnableVertexAttribArray(2);
|
||||
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), NULL);
|
||||
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), (void *)(3 * sizeof(GLfloat)));
|
||||
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), (void *)(6 * sizeof(GLfloat)));
|
||||
|
||||
projection = glm::perspective((float)(60.0 * M_PI / 180.0), (float)WIDTH / (float)HEIGHT, 0.1f, 1000.0f);
|
||||
|
||||
for (int i = 0; i < 16; i++)
|
||||
{
|
||||
for (int j = 0; j < 16; j++)
|
||||
{
|
||||
if (((j / 2) & 1) == ((i / 2) & 1))
|
||||
{
|
||||
texture_data[i][j][0] = 255;
|
||||
texture_data[i][j][1] = 255;
|
||||
texture_data[i][j][2] = 255;
|
||||
texture_data[i][j][3] = 255;
|
||||
}
|
||||
else
|
||||
{
|
||||
texture_data[i][j][0] = 100;
|
||||
texture_data[i][j][1] = 100;
|
||||
texture_data[i][j][2] = 100;
|
||||
texture_data[i][j][3] = 100;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
texture = glcxx::Texture::create();
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
texture->bind(GL_TEXTURE_2D);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, &texture_data[0][0][0]);
|
||||
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
}
|
||||
catch (glcxx::Error & e)
|
||||
{
|
||||
cerr << "glcxx error: " << e.what() << endl;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static void draw_cube()
|
||||
{
|
||||
static const struct
|
||||
{
|
||||
int counts;
|
||||
float axis[3];
|
||||
} rotations[] = {
|
||||
{0, {0, 0, 0}},
|
||||
{1, {1, 0, 0}},
|
||||
{2, {1, 0, 0}},
|
||||
{3, {1, 0, 0}},
|
||||
{1, {0, 1, 0}},
|
||||
{3, {0, 1, 0}},
|
||||
};
|
||||
|
||||
glm::mat4 modelview_backup = modelview;
|
||||
|
||||
program->use();
|
||||
cube_array->bind();
|
||||
|
||||
glUniform4f(uniforms.ambient, 0.2, 0.2, 0.2, 0.2);
|
||||
glUniform4f(uniforms.specular, 1.0, 1.0, 1.0, 1.0);
|
||||
glUniform1f(uniforms.shininess, 150.0);
|
||||
glUniform1i(uniforms.tex, 0);
|
||||
glUniformMatrix4fv(uniforms.projection, 1, GL_FALSE, &projection[0][0]);
|
||||
|
||||
for (unsigned int i = 0; i < sizeof(rotations) / sizeof(rotations[0]); i++)
|
||||
{
|
||||
if (rotations[i].counts > 0)
|
||||
{
|
||||
modelview = glm::rotate(modelview_backup,
|
||||
(float)(M_PI / 2.0 * rotations[i].counts),
|
||||
glm::vec3(rotations[i].axis[0],
|
||||
rotations[i].axis[1],
|
||||
rotations[i].axis[2]));
|
||||
}
|
||||
glUniformMatrix4fv(uniforms.modelview, 1, GL_FALSE, &modelview[0][0]);
|
||||
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
|
||||
}
|
||||
|
||||
modelview = modelview_backup;
|
||||
}
|
||||
|
||||
void display(SDL_Window * window)
|
||||
{
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
modelview = glm::lookAt(glm::vec3(-1, -8, 7),
|
||||
glm::vec3(0, 0, 0),
|
||||
glm::vec3(0, 0, 1));
|
||||
modelview = glm::rotate(modelview, (float)(SDL_GetTicks() / 1000.0), glm::vec3(0, 0, 1));
|
||||
modelview = glm::translate(modelview, glm::vec3(3, 0, 0));
|
||||
|
||||
draw_cube();
|
||||
|
||||
SDL_GL_SwapWindow(window);
|
||||
}
|
||||
|
||||
static SDL_Event UpdateEvent;
|
||||
|
||||
static Uint32 UpdateCallback(Uint32 interval, void * param)
|
||||
{
|
||||
SDL_PushEvent(&UpdateEvent);
|
||||
return interval;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER))
|
||||
{
|
||||
printf("Failed to initialize SDL!\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
atexit(SDL_Quit);
|
||||
|
||||
SDL_Window * window = SDL_CreateWindow(argv[0],
|
||||
SDL_WINDOWPOS_UNDEFINED,
|
||||
SDL_WINDOWPOS_UNDEFINED,
|
||||
WIDTH,
|
||||
HEIGHT,
|
||||
SDL_WINDOW_OPENGL);
|
||||
if (!window)
|
||||
{
|
||||
printf("Failed to create window!\n");
|
||||
SDL_Quit();
|
||||
return 2;
|
||||
}
|
||||
|
||||
(void)SDL_GL_CreateContext(window);
|
||||
|
||||
if (gl3wInit())
|
||||
{
|
||||
cerr << "Failed to initialize GL3W" << endl;
|
||||
return 2;
|
||||
}
|
||||
if (!gl3wIsSupported(3, 0))
|
||||
{
|
||||
cerr << "OpenGL 3.0 is not supported!" << endl;
|
||||
return 2;
|
||||
}
|
||||
|
||||
if (!init())
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
UpdateEvent.type = SDL_USEREVENT;
|
||||
UpdateEvent.user.code = 0;
|
||||
SDL_AddTimer(25, UpdateCallback, NULL);
|
||||
display(window);
|
||||
SDL_Event event;
|
||||
while (SDL_WaitEvent(&event))
|
||||
{
|
||||
if (event.type == SDL_QUIT)
|
||||
break;
|
||||
else if (event.type == SDL_KEYDOWN)
|
||||
{
|
||||
if (event.key.keysym.sym == SDLK_ESCAPE)
|
||||
break;
|
||||
if (event.key.keysym.sym == SDLK_RETURN)
|
||||
display(window);
|
||||
}
|
||||
else if (event.type == SDL_USEREVENT)
|
||||
{
|
||||
display(window);
|
||||
}
|
||||
}
|
||||
}
|
36
cube.f.glsl
Normal file
36
cube.f.glsl
Normal file
@ -0,0 +1,36 @@
|
||||
|
||||
uniform vec4 ambient, specular;
|
||||
uniform float shininess;
|
||||
uniform sampler2D tex;
|
||||
|
||||
varying vec3 pos_i;
|
||||
varying vec3 normal_i;
|
||||
varying vec2 tex_coord_i;
|
||||
|
||||
void main(void)
|
||||
{
|
||||
vec3 n, lightDir;
|
||||
vec4 color;
|
||||
float NdotL, RdotEye;
|
||||
|
||||
lightDir = normalize(vec3(-0.1, 0, -0.9));
|
||||
vec4 texture_color = texture2D(tex, tex_coord_i);
|
||||
color = texture_color * ambient; /* ambient light */
|
||||
n = normalize(normal_i);
|
||||
|
||||
NdotL = dot(n, -lightDir);
|
||||
|
||||
if (NdotL > 0.0)
|
||||
{
|
||||
/* diffuse component */
|
||||
color += texture_color * NdotL;
|
||||
/* specular component */
|
||||
RdotEye = dot(normalize(-pos_i), normalize(reflect(-lightDir, n)));
|
||||
if (RdotEye > 0.0)
|
||||
{
|
||||
color += clamp(specular * pow(RdotEye, shininess), 0.0, 1.0);
|
||||
}
|
||||
}
|
||||
|
||||
gl_FragColor = color;
|
||||
}
|
19
cube.v.glsl
Normal file
19
cube.v.glsl
Normal file
@ -0,0 +1,19 @@
|
||||
|
||||
uniform mat4 projection;
|
||||
uniform mat4 modelview;
|
||||
|
||||
attribute vec3 pos;
|
||||
attribute vec3 normal;
|
||||
attribute vec2 tex_coord;
|
||||
|
||||
varying vec3 pos_i;
|
||||
varying vec3 normal_i;
|
||||
varying vec2 tex_coord_i;
|
||||
|
||||
void main(void)
|
||||
{
|
||||
gl_Position = projection * modelview * vec4(pos, 1);
|
||||
pos_i = gl_Position.xyz;
|
||||
tex_coord_i = tex_coord;
|
||||
normal_i = (modelview * vec4(normal, 0)).xyz;
|
||||
}
|
174
freetype2gl3.cc
174
freetype2gl3.cc
@ -1,174 +0,0 @@
|
||||
#include "gl3w.h"
|
||||
#include <SDL.h>
|
||||
#include <iostream>
|
||||
#include <ft2build.h>
|
||||
#include FT_FREETYPE_H
|
||||
#include "GLProgram.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
#define WIDTH 500
|
||||
#define HEIGHT 500
|
||||
|
||||
static FT_Library ft;
|
||||
static FT_Face face;
|
||||
static GLProgram program;
|
||||
static GLint uniform_tex;
|
||||
static GLint uniform_color;
|
||||
|
||||
const char vertex_shader[] =
|
||||
"#version 120\n"
|
||||
"\n"
|
||||
"attribute vec4 coord;\n"
|
||||
"\n"
|
||||
"varying vec2 tex_coord_i;\n"
|
||||
"\n"
|
||||
"void main(void)\n"
|
||||
"{\n"
|
||||
" gl_Position = vec4(coord.xy * 2.0 / 500.0, 0, 1);\n"
|
||||
" tex_coord_i = coord.zw;\n"
|
||||
"}\n";
|
||||
|
||||
const char fragment_shader[] =
|
||||
"varying vec2 tex_coord_i;\n"
|
||||
"\n"
|
||||
"uniform sampler2D tex;\n"
|
||||
"uniform vec4 color;\n"
|
||||
"\n"
|
||||
"void main(void)\n"
|
||||
"{\n"
|
||||
" gl_FragColor = vec4(1, 1, 1, texture2D(tex, tex_coord_i).a) * color;\n"
|
||||
"}\n";
|
||||
|
||||
void init(void)
|
||||
{
|
||||
glClearColor (0.0, 0.0, 0.0, 0.0);
|
||||
program.create(vertex_shader, fragment_shader,
|
||||
"coord", 0, NULL,
|
||||
"tex", "color", NULL);
|
||||
uniform_tex = program.uniform("tex");
|
||||
uniform_color = program.uniform("color");
|
||||
program.use();
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
}
|
||||
|
||||
void display(SDL_Window * window)
|
||||
{
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
if (FT_Load_Char(face, 'h', FT_LOAD_RENDER) != 0)
|
||||
{
|
||||
cerr << "Failed to load character" << endl;
|
||||
}
|
||||
GLuint texture_id;
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
glGenTextures(1, &texture_id);
|
||||
glBindTexture(GL_TEXTURE_2D, texture_id);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||
glTexImage2D(GL_TEXTURE_2D,
|
||||
0,
|
||||
GL_ALPHA,
|
||||
face->glyph->bitmap.width,
|
||||
face->glyph->bitmap.rows,
|
||||
0,
|
||||
GL_ALPHA,
|
||||
GL_UNSIGNED_BYTE,
|
||||
face->glyph->bitmap.buffer);
|
||||
GLuint vbo;
|
||||
glGenBuffers(1, &vbo);
|
||||
glEnableVertexAttribArray(0);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, vbo);
|
||||
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);
|
||||
GLfloat color[4] = {1, 0.6, 0, 1.0};
|
||||
glUniform1i(uniform_tex, 0);
|
||||
glUniform4fv(uniform_color, 1, color);
|
||||
GLfloat box[4][4] = {
|
||||
{0, 0, 0, 0},
|
||||
{face->glyph->bitmap.width, 0, 1, 0},
|
||||
{0, -face->glyph->bitmap.rows, 0, 1},
|
||||
{face->glyph->bitmap.width, -face->glyph->bitmap.rows, 1, 1}
|
||||
};
|
||||
glBufferData(GL_ARRAY_BUFFER, sizeof(box), box, GL_STATIC_DRAW);
|
||||
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
||||
SDL_GL_SwapWindow(window);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
if (argc < 2)
|
||||
{
|
||||
cerr << "Usage: " << argv[0] << " <font>" << endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (SDL_Init(SDL_INIT_VIDEO))
|
||||
{
|
||||
cerr << "Failed to initialize SDL!" << endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
atexit(SDL_Quit);
|
||||
|
||||
SDL_Window * window = SDL_CreateWindow(argv[0],
|
||||
SDL_WINDOWPOS_UNDEFINED,
|
||||
SDL_WINDOWPOS_UNDEFINED,
|
||||
WIDTH,
|
||||
HEIGHT,
|
||||
SDL_WINDOW_OPENGL);
|
||||
if (!window)
|
||||
{
|
||||
cerr << "Failed to create window!" << endl;
|
||||
SDL_Quit();
|
||||
return 2;
|
||||
}
|
||||
|
||||
SDL_GLContext gl_context = SDL_GL_CreateContext(window);
|
||||
|
||||
if (gl3wInit() != 0)
|
||||
{
|
||||
cerr << "Failed to gl3wInit()" << endl;
|
||||
SDL_Quit();
|
||||
return 2;
|
||||
}
|
||||
|
||||
if (!gl3wIsSupported(3, 0))
|
||||
{
|
||||
cerr << "OpenGL 3.0 is not supported!" << endl;
|
||||
SDL_Quit();
|
||||
return 2;
|
||||
}
|
||||
|
||||
if (FT_Init_FreeType(&ft) != 0)
|
||||
{
|
||||
cerr << "Could not FT_Init_FreeType()" << endl;
|
||||
return 2;
|
||||
}
|
||||
|
||||
if (FT_New_Face(ft, argv[1], 0, &face) != 0)
|
||||
{
|
||||
cerr << "Could not load font " << argv[1] << endl;
|
||||
return 2;
|
||||
}
|
||||
|
||||
FT_Set_Pixel_Sizes(face, 0, 20);
|
||||
|
||||
init();
|
||||
display(window);
|
||||
SDL_Event event;
|
||||
while (SDL_WaitEvent(&event))
|
||||
{
|
||||
if (event.type == SDL_QUIT)
|
||||
break;
|
||||
else if (event.type == SDL_KEYDOWN)
|
||||
{
|
||||
if (event.key.keysym.sym == SDLK_ESCAPE)
|
||||
break;
|
||||
if (event.key.keysym.sym == SDLK_RETURN)
|
||||
display(window);
|
||||
}
|
||||
}
|
||||
}
|
1
libs/glcxx
Submodule
1
libs/glcxx
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit c55c2ae3b58d621d3127af7ed5980f7055cba486
|
1
libs/glm
Submodule
1
libs/glm
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit be53cebcd3ec3366e30f520bfaa35991274fc390
|
170
waf
vendored
Executable file
170
waf
vendored
Executable file
File diff suppressed because one or more lines are too long
39
wscript
Normal file
39
wscript
Normal file
@ -0,0 +1,39 @@
|
||||
import os
|
||||
|
||||
def options(opt):
|
||||
opt.load("compiler_c compiler_cxx")
|
||||
|
||||
def configure(conf):
|
||||
conf.load("compiler_c compiler_cxx")
|
||||
conf.env.INCLUDES += ["libs/glcxx/include"]
|
||||
conf.env.INCLUDES += ["libs/glm"]
|
||||
conf.env.INCLUDES += ["."]
|
||||
conf.env.DEFINES += ['''GLCXX_GL_INCLUDE="GL3/gl3w.h"''']
|
||||
conf.env.CXXFLAGS += ["-Wall"]
|
||||
conf.env.CXXFLAGS += ["-std=gnu++14"]
|
||||
conf.check_cfg(package = "sdl2", args = "--cflags --libs")
|
||||
if "MINGW" in os.popen("uname").read():
|
||||
# TODO: set CXX to mingw32-g++
|
||||
pass
|
||||
if os.listdir("libs/glcxx") == []:
|
||||
print("Fetching git submodules...")
|
||||
from subprocess import Popen
|
||||
Popen(["git", "submodule", "update", "--init"]).wait()
|
||||
|
||||
def build(bld):
|
||||
sources = ["app.cc"] + \
|
||||
bld.path.ant_glob("libs/glcxx/src/**/*.cpp") + \
|
||||
bld.path.ant_glob("GL3/**/*.c")
|
||||
|
||||
libs = []
|
||||
if "MINGW" in os.popen("uname").read():
|
||||
libs += ["opengl32", "mingw32"]
|
||||
else:
|
||||
libs += ["dl", "GL"]
|
||||
bld.program(
|
||||
source = sources,
|
||||
target = "app",
|
||||
uselib = "SDL2",
|
||||
lib = libs,
|
||||
linkflags = ["-Wl,-rpath,$ORIGIN"],
|
||||
install_path = None)
|
Loading…
x
Reference in New Issue
Block a user