import glcxx example app to start

This commit is contained in:
Josh Holtrop 2018-01-23 05:45:19 -05:00
parent 9f08819dc1
commit 9bad7a1d86
22 changed files with 752 additions and 1758 deletions

7
.gitignore vendored
View File

@ -1,4 +1,3 @@
/build
/.rsconscache
/freetype2gl3
/freetype2gl3.exe
/build/
/.waf*
/.lock-waf*

6
.gitmodules vendored Normal file
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

File diff suppressed because it is too large Load Diff

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");
}

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
}

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;
}

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

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;
}

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

View File

@ -1,5 +0,0 @@
source "http://rubygems.org"
gem "rscons"
gem "rake"
gem "json"

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

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

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
app.cc Normal file
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);
}
}
}

2
configure vendored Executable file
View File

@ -0,0 +1,2 @@
#!/bin/sh
exec ./waf configure "$@"

36
cube.f.glsl Normal file
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
cube.v.glsl Normal file
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;
}

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);
}
}
}

1
libs/glcxx Submodule

@ -0,0 +1 @@
Subproject commit c55c2ae3b58d621d3127af7ed5980f7055cba486

1
libs/glm Submodule

@ -0,0 +1 @@
Subproject commit be53cebcd3ec3366e30f520bfaa35991274fc390

170
waf vendored Executable file

File diff suppressed because one or more lines are too long

39
wscript Normal file
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)