import glcxx example app to start

This commit is contained in:
josh committed 2018-01-23 05:48:38 -05:00
1 parent 9f08819dc1
commit 9bad7a1d86
22 files changed
+752 -1758

No files matched your search

+3 -4
View File
@@ -1,4 +1,3 @@
/build
/.rsconscache
/freetype2gl3
/freetype2gl3.exe
/build/
/.waf*
/.lock-waf*
+6
View 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
+181 -1095
View File
File diff suppressed because it is too large. Load diff
+25 -113
View File
@@ -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");
}
+25 -114
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
-5
View File
@@ -1,5 +0,0 @@
source "http://rubygems.org"
gem "rscons"
gem "rake"
gem "json"
-14
View File
@@ -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
+8 -12
View File
@@ -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
View File
@@ -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
View 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);
}
}
}
Vendored Executable
+2
View File
@@ -0,0 +1,2 @@
#!/bin/sh
exec ./waf configure "$@"
+36
View 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
View 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
View File
@@ -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);
}
}
}
Submodule
+1
Submodule libs/glcxx added at c55c2ae3b5.
Submodule
+1
Submodule libs/glm added at be53cebcd3.
Vendored Executable
+170
View File
@@ -0,0 +1,170 @@
#!/usr/bin/env python
# encoding: ISO8859-1
# Thomas Nagy, 2005-2016
"""
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
"""
import os, sys, inspect
VERSION="1.8.20"
REVISION="c859ca7dc3693011756f4edf45c36626"
GIT="8e4f6ea5f13d692848c1225cab94bce59d0d9a19"
INSTALL=''
C1='#3'
C2='#-'
C3='#,'
cwd = os.getcwd()
join = os.path.join
WAF='waf'
def b(x):
return x
if sys.hexversion>0x300000f:
WAF='waf3'
def b(x):
return x.encode()
def err(m):
print(('\033[91mError: %s\033[0m' % m))
sys.exit(1)
def unpack_wafdir(dir, src):
f = open(src,'rb')
c = 'corrupt archive (%d)'
while 1:
line = f.readline()
if not line: err('run waf-light from a folder containing waflib')
if line == b('#==>\n'):
txt = f.readline()
if not txt: err(c % 1)
if f.readline() != b('#<==\n'): err(c % 2)
break
if not txt: err(c % 3)
txt = txt[1:-1].replace(b(C1), b('\n')).replace(b(C2), b('\r')).replace(b(C3), b('\x00'))
import shutil, tarfile
try: shutil.rmtree(dir)
except OSError: pass
try:
for x in ('Tools', 'extras'):
os.makedirs(join(dir, 'waflib', x))
except OSError:
err("Cannot unpack waf lib into %s\nMove waf in a writable directory" % dir)
os.chdir(dir)
tmp = 't.bz2'
t = open(tmp,'wb')
try: t.write(txt)
finally: t.close()
try:
t = tarfile.open(tmp)
except:
try:
os.system('bunzip2 t.bz2')
t = tarfile.open('t')
tmp = 't'
except:
os.chdir(cwd)
try: shutil.rmtree(dir)
except OSError: pass
err("Waf cannot be unpacked, check that bzip2 support is present")
try:
for x in t: t.extract(x)
finally:
t.close()
for x in ('Tools', 'extras'):
os.chmod(join('waflib',x), 493)
if sys.hexversion<0x300000f:
sys.path = [join(dir, 'waflib')] + sys.path
import fixpy2
fixpy2.fixdir(dir)
os.remove(tmp)
os.chdir(cwd)
try: dir = unicode(dir, 'mbcs')
except: pass
try:
from ctypes import windll
windll.kernel32.SetFileAttributesW(dir, 2)
except:
pass
def test(dir):
try:
os.stat(join(dir, 'waflib'))
return os.path.abspath(dir)
except OSError:
pass
def find_lib():
src = os.path.abspath(inspect.getfile(inspect.getmodule(err)))
base, name = os.path.split(src)
#devs use $WAFDIR
w=test(os.environ.get('WAFDIR', ''))
if w: return w
#waf-light
if name.endswith('waf-light'):
w = test(base)
if w: return w
err('waf-light requires waflib -> export WAFDIR=/folder')
dirname = '%s-%s-%s' % (WAF, VERSION, REVISION)
for i in (INSTALL,'/usr','/usr/local','/opt'):
w = test(i + '/lib/' + dirname)
if w: return w
#waf-local
dir = join(base, (sys.platform != 'win32' and '.' or '') + dirname)
w = test(dir)
if w: return w
#unpack
unpack_wafdir(dir, src)
return dir
wafdir = find_lib()
sys.path.insert(0, wafdir)
if __name__ == '__main__':
from waflib import Scripting
Scripting.waf_entry_point(cwd, VERSION, wafdir)
#==>
#BZh91AY&SYE~ŸjQnÿÿÿ°#,Óÿÿÿÿÿÿÿÿÿÿÿ„ Y#, §%H4�#,`¨b÷{åÞ�#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,:)„´Û§5_Z]¶h.½në¾ñ�ݺ­j×ÑõëÈëJtØîôêÙ}öŽÔ–ÛSå÷ÓîL,ëU)Ã¥öáHäïov”Ç»žÇ»uªÞó·;Þ§­tÕ]ôõzúo­{îîîÞ ¼Ñ­Ý§ªwžìÓ�»Ýò÷¼:è\O‹´úmvû=ÐÀ·pïºáO½óï#,#,#,t#,#,ϳ@0:-l _`#,}ßcƒË˜U5 nîè´î—q½ØtÐiîΕ¡ªÓ´ôh;ÛÝÐ{›h#3t=9í݆…µ0’$J€ #3õ¥c@E4I P¯Z$–‡®$×Û{{›cï0ö©°ëÝ7¶÷†÷{½@ï{ÞÔìÒvÐ*Yk-¾»Õ6[ÓN®æñνv÷}gm¶=ozÞ�o/wß5OvóxöÞûÙówyÝöïeZwnówkÚÕÚÎn¹]õàójSv#,4/{vÌ€5@#3އN޹³ÞÏly×]¾ûï&A ¡W|稀“Ó ov»Ë#3^ÀdU(‰ë(#,ê+ X¶�+®¬Z!îî^æÏx#,Ø=w¶õîw>}îô…#,¶}k¬[Y�§;ÏxãÜ;{ïz=k{vÇUÙ<æ‡F±ÛÐßw½ÈN3åZi}çšdç×Y}ÙÒ{ÙÍ5)Nûï=ŸWnÜyוҧ»'½½ï Æ÷ÏomìÌû�îóÕÞ÷·¶Û½ï^í_{ÜÔ{Ùî÷Úó{ÔîîÝn– Û�ïyÜ}]”ZÊíÀ»ëî2iFOô¢™ëÚѶÞ3·r»ê)Q­,ÜÙÝÇÍ«Ý÷x�Ùßwq>Þíç§«Ì}óvöi÷ÜûÄ›îÐöÎ=çž�¥£}zz^Ÿ¬#,ou¾æò}Ã`/—ÞÛk[ƒÅ#,%#3…P ¶:ÝÎwhÙRw;Y´8çGO»oò;¢Õ¾ìŽ3uÓEƒ»®Yªnõga¥GW{´»wm#,#,ööã©#,#,ov·¾÷ß3é_w“‘ÝÍÖ¦z}ç¼öﮞñ÷¼GEòGqGn커mÖv«ë={ïv÷»×»Ìl±b7:"=]ï5g¶Í³Žß{¸x –†š=îîîêºëÞë½µè6ÙãÛ>ž©é…/­òâo{î÷½»³¯W_vö#-²æçS#-¾ØùÖæ÷wv_/O“Ýöê8Õy·Å”Ê�”€ûtè+{z•ëÛ^�xµè3ë Ñx_Cï}­lÃ=í­}Íéïcß#,0zÕ]#3§}íÜéí÷o#-׳Þ_nì˜Þ¬m®ôëÚ÷×KÐù…}�½eíë¯jÚûˆ{ÞÙ÷;ž«ë{nîhÛ]õÝÎÆŽíw{Ϋè>ç­O¯(é†àÜ®½½yì÷ѾÀw°#,è ³—1®�8PÐ6Æ97™Þ¯‹îïx¨€=uTžJû³§Û`1×mq°îµk©ëþ¸z}÷ß{º·N¹·[pvÒ¥)E ×\£Šèm§'»ºi¯®·hæ=©¾™{ëóØëÛ¼óßoŸ{×½|l>úWvî狀ç;ê0‹fîÔ:}öp“Ú뵄Rê®ös¶}î÷¦ÞÔ$úõï—ewwn5âëž»O7�}È;áÜ%4�#, d#,&€& d2 ‚žSdMêCG”ÐÓÔѦž¦†š<š›PJh‚dÔÚT÷©•?SÑ=MLM¨SƒÒb4hh#,#,#,#,#,�HH!š!©‰“!=TýSõOÓA¦”Ú#-Cjd~”#,#,#,#,€#,#,z¥P$Ú5#-ªy)ê?Bj=&Lš¡ #-�£M4@#,#,#,#,#,#,‰!#,#, ˜D2 é¢djx OIêlˆ@#,2#,#,&¢ €@ 4˜™#3Ÿ™SÊz#)úž¨< õ§êž§êz§ê†€ #,#,õ_è[m_ÿsëE­sksë™ý.ÛS¨™¤)ôíµvè¦ d‘Š’#3A�  y�€‚|²'ãùþŸ¯ô¹ýx¦zu1xxy0©FŒV‹Q7j®‰É™›œnÇ u[¹þ±ôúŸh‹_¹ ÊI#,'d9U™Q9Ð*Åb#3±äÒŒ‚¢.¥éxç�t]3­dÓMGÎdËÎ=a&Ìšz|9y·8Ööóx]ó$˜[+˜šÄŸ�#3úÎ`)`,ŠFÝMV–Õh«hƵ¶*¬ÝT*�T‘U‚€ó#3LÈ*x*€«eB(¶ #,ºtÛ^[VÒµ¥»£TkÚ­¶¾íU«TÈ$#3 ÌKM12!£´lʈ’š‘,dI)F”Sm%B*d’ÅÂhÚšŠ¤ Â"PL™¢l¡l¦2VemIcBi…(*4‘I±ŠShŠJRÒ™¢,´�l“Á”‘Kb‹h´š j ¥•±5(ÉAI(¦”HÂÌÔZ5ÓVÒ«R’mDÉ™2hت µ+XÍ0Í™¦mIc4Û`–•DHÔµ4É©…‘L’j6�‘©V“Y©4š#-2J4Ii ´RšÆHfÉ¢`…‚ŒÍ4Æi±‰‚TÒÁ!bÌÄ6&D¢$¡²mIE,@B+&†HŒÈBFYšX¤ÉÒaŒ”Ò[IQh6˜Ô© Y&(ÓH°¢ID›"”LbÄÅA²e6ŠI–�ÊHš YR3%J(¦dXÛ!PÈ¢XQI "Ø‹I`lÔd‚¢‰(¨ÔDR͈$“RX¤Å &R1’dÍ„[2¦A°•!BT›!$šJÁ‰),Yf`Ù´FšF�„”BÊHIš#-"Rš¥›1RŠ e˜dÒÉ54Ê4ÒÅ%™2²1$Š-#,ËK$#3‰,!² ÓfPcQ³HØÃ)¥‰)­¦ƒC™¤Qf"5&JM i¤¥–�T¨¨¢aAEÁdDIJ#3c„‘’f(#,ÑÊ™–Ò"°¥RÊT�“!JB›Ii(¶HÖ4“$’„¢ÉMd[ £fC&hˆÃd“eI¦SQŒe• ÌÒ˜„†(TÉ¢*hŒY©±I”Y1%"•$�²Š™%4Á@ÆˆÚ RdÙI3#-“dÑ“!PÒ0!Še”¬¤Ãh,›% I�‰’É”d"™ ÉL¤e‰˜KIJ¦ÍE¡2‚dJHƒj1li&k"†“I #*4†Š#,•Š5Š–L(Ö2ÍL‘3E“ Ë"%b–@�%%Fi#-šÚ•U‚‹c•4 IAŒ¤�)’™&4š6ÉiK4iŠLÆS4²¤ÙK¦F6É(Щ²Œ¤f�#-6ZýÆ×cHYZJBT£%5�Z+Š�’LÒ¢&™(ÒZ#3�„T’µ164± Ë)HJ’5˜ØÈAP–¡6ÑdSY2L´¨Ò- %1©iS$i1a™”ªÍ,¡YR*•JÅ6Q%•M«&¤F¶M2²%I¨JÙ*ÊÊRša[1CLˆ±­´ÔIi(ÒQ,k�S6‹a-´ƒ6 ¬$jMlm%£4ÌCTRƒF¬U Ô†Ö!5“#3#[5&†SQH&‹CR‰M©lFѲI¬cR5¤”µ­•m4¢Â6V“dba›6È“2ššP¤™mSj)i)MK*Kiªm%ªi‰1k*e,›ifÚlÅ£Fkf³3$šË°jM´µ•!±µ4¢ˆ€Ä3Q¤£H˜Å!!ˆBÐP“0)mRD¤ÔS)ª6”šXÔdÉ ÒS (¤Rʈؤ–Tˆš)‚™(ÖSf†,HJEE¢Ì�Æ)Y©,6̳4³¦#3�Љ‘M$dÆÁ„,IJ›FÄšJ2fƒH³(µ3%LSE&Ѧ6#-¥EŒÃ3j,”&ÄQHcSM£0³6Š‹hFŒlšš)0V²ÐPˆÑY2JJdÊl-ˆS5(“$›-(„ª‹-Iš#a±©M&Ìm&Qf’±lA!’0IFFdÙI4%I©2”lÍ1&¥²Í‹AYK4›&Æ%Eh¤¦fM™kI2R–‹"Fl‘ fDÆ‹JhŒQYdÙ)¡‰ˆšM$$mˆÕ Q´j4Q¶"´Æ“#-$Ë(,šE¢˜TS$�,X5JÊI5!@Tk&adÒÊdi…i66Ú6’Ö$Ñ¡2Í´‘i-ŠƒFX)6¥(•¢ØÒ“4!Q²LÖdT‘%F’4E–U©� šŠÆLL¬•M)B£JJhŠ$©bT”ÊR�¶ÁjH¢ÉFÉTa”l–6ÉI©66Õ)¢’Š”Õ!jMІ’fÉ ¤¨°Ò‘,ZA))ŒÑƒi0f…ƒU(��%”¬LF”–ŠÑ�dŠÉl2J(Ác)lFÑYI(©#,ÐbŠL&­((´¦©M¦j-±¬VÍ1Y-f�¢©š’‹Å(#(-,"JFÉL0elAFØØ¶��)­d†Z ¬`2j-#3Ñ3l³j6‹EE¬d“Z‘FlÙ#-,¬J£‹2ÅTÔ”�²Œ±¢”M$l lV ,i-’ØÖJ-Ik›JfQ¤Ú,)”hÛZ¥m¤c*M%L¢Ñ±´0-’ÒÙ&ÚLfKdÙ*-¨Ñ%´V�lZ6ÛFÕ#3Y6¶"Õ5+-¢Q”P6’cKblÓb¤�–EEÌlI‰$ÊI‘% RIŒB_÷ßñO÷Óû�ÿK6͘ª=¹ ´ÈÉ‹©{OõÚ’Ø•ûrÚ.%2.…T"bbÏñOðAf?ßýôkMAš\j£ÿn2Å?¿ÜQ,Cµ ÇzÓoSÑŠ±4Òé�Ü–#3W4ÎÌEuÁÉ#,Gd£ü¿ŸÏ\aï,þÛ´?ìy–dÿWù¹òÇøn¬e㌺¢©‘K;«¹ F#Âv%„"Né»s‡ÛÁ¾,>?›KßV£#3g…ÔÂ!E·–›AØ­1tÒöõxQ¦>HÞâ#�ã´t„º¢°YWVÚ¶…ˆ°yÔ)ÁQÅTUva¥¥di2Ó†Y×[#¾÷”ÝÛnËÅð¯ ç®|«áéþ^ÊõWÀ¹¹hØÖÍÕ}w^Iç*$µß=]娼î´Oæu|ùÕ2øni,X%�]–¬rÔk{–ýÊ?ä\ Za6 kUíI³,b¨©î£-ŒE‹ñÿ–ýÕ£0#3�£z¤õ2„0†“Ç:�îr@SVª’[Ê!ˆü³Œà?ÄC²j<F �Œií4õjf |¡¨M†È.�`Åÿš Ÿ&, @¶‡†ºÝ‚‘1ÞnZŠ *Šh[¸Ñ\Üɤ)5dƒQE ¾rÀåT+Êé<ÒFnÒBS)"žÚ”Ä¥&Ül�ùÙrç<÷$À"¶RÇ$¡ès(´„:†Px«ÕWÄõ^6ÝJ¯[¢bŒ2(=¾··¥‘‘Ô£GÙÔU£¥[ŽÝ|6òñ]óÝNê:W.Iºë±:ë¦.[†ú·—�þÍü˼‰`z%f†‰B0h•²•¸�iúê¢3×EküU¦:Óÿ=é‚eƒþÊ)6J(žu1¤Û*ÂäA�¡Gÿ)\Æw¿›$4ºˆÃ¶”lkõšÃ#,jªÒ?dœê«ì5Ûù"ëòö홸ŠÕk‡˜V|us$NÒŒ6Êj8Ú¹‰S½5N8Ô<8ÐâªZ­Œ9PÙ�ƒ‚-0ìì}‰hŒÒz®v»�Æ�­G ÄF}ìDx8fš´(ÚZ�ÚΚ‰™Ú†{M$ô@°´d<R–æéCûœ$ðf-¤ð,)`°KÓ­ãî~X£d#3Œí­l•X” ¥´-ù2êL|›·øµ¬a©i´wû¤Ká!¦ÚÆMö»M’Q‘¾î»_Šî�™ò3�”LºÙ\܉x¨r¹B/ý–—ÀªG›]¢¼rdp²¶ÓOöö…Å�‰ù‘½¶K©´QF�xæe“x×.[¯Ðòš�?‚ÆÞ«¾î¯ÖxLÏõöÿ]Úû/‹´c–æ�Wuqb1E�“†ZO{®Wžv„”42)Ñ¡‘VtåF Š'�®ñWMXÞ¯'ßïE)}.T~'Âó6 Åq˜¯Üšëèë�¥Å%²a|ö®�ï}y4XÖ,š¾Éþ«x¾UÈÚýWP�yݦù}àÃç¨hüáÅb##,Ž4¹õÀ=zÕ�è¢sÉPÂ#]+k6CÉ#,ÀÁˆÃkèïÚy\Û©¾™u#Es‰c':¡I»¸ÈZoTZ!pYiZÔ'©%¬Xá*1L…'ui­)»>I®¥#3ŠÀñª-¥DM{îùˆ�žÜðdž [×&�ý×iY&J¤`-<¬£“#-P´ÈÒ,�*¤·h�A*îx�¢Z2e¤.ª±E©J©ÜÑ”7ß±8W¥Ð¬çÝPôfG’÷Á,ñªmé¨h:¡Ùl>ûcŸ”מ†}Ü=û�Â%nŸXë.™`ñ,kŸ åB #*äú¡ 7qÌÇÏ[xT°<5B^N4\‘`F*#31Š ?i=¶¦!„"�6„QÆØ®,Çü Âü¯,>WsLine truncated
#<==
#-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v2\n\niQIcBAABCgAGBQJW3BWfAAoJEGelZe39+Q5kRU0P/iqc7D5tlzWrwTr9j9oQCMBa\n7HnJ+rYewgLX/zK07XgsIDa0OyNy7emdG+YRe2EYQHyn+V4QJl7VZLW8cbG0EJiY\n0Nfjhy6Dk28H9TA3vLkOwFkoQK/jYKFMARZhUOpdQYJ93xmHOkEF/o2Uoa3QtY6O\noouGuE+iU5RT0r675Sb7X4m8/Lcv1HO2EKhPG4dNWPUytupGVEA/eyDldIOViDN5\nYUc6Oa6yWOP9g88TjeeT4KcbpxneHAC8AOBRmMjR4/o2ioBX4mMHehJOuEXxJwoD\n4WE/jTQgf0icAmfm1okg/kJGXE+/QNgvWSfWxgL6/RLHwEA+DNrBI9u8rD3o2VLI\nHdcyvjWHJfEIWDowZY4XjbhJRvN1dthfcxfXMuBdBuEn275d+JoJZXhHCgvKMqTO\nkirZrlPcGESPNTiESvScOD3zrONpdKcWGbUaY2bI7nn+m/JwsEuueA8Me2l27R8M\nmUBycqxI5iHMLXEzQO2LztRVsx9tF23ReaLAj0mj9G32qjYwKiu49tPFrGywLlnq\nJpRZQGUH4AX51GEYed/9uzoTb0L8PbGuQhRYhtaSY+WT+nxq4gnrhm4v+rvcXGXi\nA440RRlTP2AqZXXNMUP03DV26/5O2zVzssPhtN9W5aNb07LJH3vj1cjiRp/m++Sa\nxGMK2mRBBCWRJ5m/YyrH\n=pYvc\n-----END PGP SIGNATURE-----\n
+39
View 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)