mirror of https://github.com/mosra/magnum.git
63 changed files with 3557 additions and 418 deletions
@ -0,0 +1,29 @@
|
||||
# Author: mosra <mosra@centrum.cz> |
||||
pkgname=nacl-magnum |
||||
pkgver=dev |
||||
pkgrel=1 |
||||
pkgdesc="OpenGL 3 graphics engine (NaCl x86-64 version)" |
||||
arch=('x86_64') |
||||
url="https://github.com/mosra/magnum" |
||||
license=('LGPLv3') |
||||
depends=('nacl-corrade') |
||||
makedepends=('nacl-sdk' 'cmake') |
||||
options=(!makeflags !buildflags !strip) |
||||
|
||||
build() { |
||||
mkdir -p "$startdir/build-nacl-x86-64" |
||||
cd "$startdir/build-nacl-x86-64" |
||||
|
||||
cmake .. \ |
||||
-DCMAKE_MODULE_PATH="$startdir/toolchains/modules" \ |
||||
-DCMAKE_TOOLCHAIN_FILE="$startdir/toolchains/generic/NaCl-glibc-x86-64.cmake" \ |
||||
-DCMAKE_BUILD_TYPE=Release \ |
||||
-DCMAKE_INSTALL_PREFIX=/usr/nacl \ |
||||
-DWITH_NACLAPPLICATION=ON |
||||
make |
||||
} |
||||
|
||||
package() { |
||||
cd "$startdir/build-nacl-x86-64" |
||||
make DESTDIR="$pkgdir/" install |
||||
} |
||||
@ -0,0 +1,15 @@
|
||||
/** @page best-practices Best practices in OpenGL |
||||
|
||||
@brief Platform-specific and general performance advices |
||||
|
||||
Here is collection of carefully selected links to official guidelines and |
||||
other articles with valuable information to help developers create better |
||||
applications. Feel free to add one, if it contains new unique information. |
||||
|
||||
@section best-practices-platform Platform-specific |
||||
|
||||
- Mac OS - [Best Practices for Working with Vertex Data](https://developer.apple.com/library/mac/#documentation/graphicsimaging/Conceptual/OpenGL-MacProgGuide/opengl_vertexdata/opengl_vertexdata.html), [Best Practices for Working with Texture Data](https://developer.apple.com/library/mac/#documentation/graphicsimaging/Conceptual/OpenGL-MacProgGuide/opengl_texturedata/opengl_texturedata.html) |
||||
- iOS - [Best Practices for Working with Vertex Data](http://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/TechniquesforWorkingwithVertexData/TechniquesforWorkingwithVertexData.html), [Best Practices for Working with Texture Data](http://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/TechniquesForWorkingWithTextureData/TechniquesForWorkingWithTextureData.html), [Best Practices for Shaders](http://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/BestPracticesforShaders/BestPracticesforShaders.html#//apple_ref/doc/uid/TP40008793-CH7-SW3) |
||||
- Google Chrome Native Client - [Best practices for 3D graphics](https://developers.google.com/native-client/beta/devguide/coding/3D-graphics#best-practices) |
||||
|
||||
*/ |
||||
@ -0,0 +1,8 @@
|
||||
namespace Magnum { |
||||
/** @page tips Tips and tricks |
||||
@brief Hints for better productivity and performance |
||||
|
||||
- @subpage compilation-speedup - @copybrief compilation-speedup |
||||
- @subpage best-practices - @copybrief best-practices |
||||
*/ |
||||
} |
||||
@ -0,0 +1,620 @@
|
||||
#ifndef __gl2_h_ |
||||
#define __gl2_h_ |
||||
|
||||
/* $Revision: 16803 $ on $Date:: 2012-02-02 09:49:18 -0800 #$ */ |
||||
|
||||
#include <GLES2/gl2platform.h> |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/*
|
||||
* This document is licensed under the SGI Free Software B License Version |
||||
* 2.0. For details, see http://oss.sgi.com/projects/FreeB/ .
|
||||
*/ |
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Data type definitions |
||||
*-----------------------------------------------------------------------*/ |
||||
|
||||
typedef void GLvoid; |
||||
typedef char GLchar; |
||||
typedef unsigned int GLenum; |
||||
typedef unsigned char GLboolean; |
||||
typedef unsigned int GLbitfield; |
||||
typedef khronos_int8_t GLbyte; |
||||
typedef short GLshort; |
||||
typedef int GLint; |
||||
typedef int GLsizei; |
||||
typedef khronos_uint8_t GLubyte; |
||||
typedef unsigned short GLushort; |
||||
typedef unsigned int GLuint; |
||||
typedef khronos_float_t GLfloat; |
||||
typedef khronos_float_t GLclampf; |
||||
typedef khronos_int32_t GLfixed; |
||||
|
||||
/* GL types for handling large vertex buffer objects */ |
||||
typedef khronos_intptr_t GLintptr; |
||||
typedef khronos_ssize_t GLsizeiptr; |
||||
|
||||
/* OpenGL ES core versions */ |
||||
#define GL_ES_VERSION_2_0 1 |
||||
|
||||
/* ClearBufferMask */ |
||||
#define GL_DEPTH_BUFFER_BIT 0x00000100 |
||||
#define GL_STENCIL_BUFFER_BIT 0x00000400 |
||||
#define GL_COLOR_BUFFER_BIT 0x00004000 |
||||
|
||||
/* Boolean */ |
||||
#define GL_FALSE 0 |
||||
#define GL_TRUE 1 |
||||
|
||||
/* BeginMode */ |
||||
#define GL_POINTS 0x0000 |
||||
#define GL_LINES 0x0001 |
||||
#define GL_LINE_LOOP 0x0002 |
||||
#define GL_LINE_STRIP 0x0003 |
||||
#define GL_TRIANGLES 0x0004 |
||||
#define GL_TRIANGLE_STRIP 0x0005 |
||||
#define GL_TRIANGLE_FAN 0x0006 |
||||
|
||||
/* AlphaFunction (not supported in ES20) */ |
||||
/* GL_NEVER */ |
||||
/* GL_LESS */ |
||||
/* GL_EQUAL */ |
||||
/* GL_LEQUAL */ |
||||
/* GL_GREATER */ |
||||
/* GL_NOTEQUAL */ |
||||
/* GL_GEQUAL */ |
||||
/* GL_ALWAYS */ |
||||
|
||||
/* BlendingFactorDest */ |
||||
#define GL_ZERO 0 |
||||
#define GL_ONE 1 |
||||
#define GL_SRC_COLOR 0x0300 |
||||
#define GL_ONE_MINUS_SRC_COLOR 0x0301 |
||||
#define GL_SRC_ALPHA 0x0302 |
||||
#define GL_ONE_MINUS_SRC_ALPHA 0x0303 |
||||
#define GL_DST_ALPHA 0x0304 |
||||
#define GL_ONE_MINUS_DST_ALPHA 0x0305 |
||||
|
||||
/* BlendingFactorSrc */ |
||||
/* GL_ZERO */ |
||||
/* GL_ONE */ |
||||
#define GL_DST_COLOR 0x0306 |
||||
#define GL_ONE_MINUS_DST_COLOR 0x0307 |
||||
#define GL_SRC_ALPHA_SATURATE 0x0308 |
||||
/* GL_SRC_ALPHA */ |
||||
/* GL_ONE_MINUS_SRC_ALPHA */ |
||||
/* GL_DST_ALPHA */ |
||||
/* GL_ONE_MINUS_DST_ALPHA */ |
||||
|
||||
/* BlendEquationSeparate */ |
||||
#define GL_FUNC_ADD 0x8006 |
||||
#define GL_BLEND_EQUATION 0x8009 |
||||
#define GL_BLEND_EQUATION_RGB 0x8009 /* same as BLEND_EQUATION */ |
||||
#define GL_BLEND_EQUATION_ALPHA 0x883D |
||||
|
||||
/* BlendSubtract */ |
||||
#define GL_FUNC_SUBTRACT 0x800A |
||||
#define GL_FUNC_REVERSE_SUBTRACT 0x800B |
||||
|
||||
/* Separate Blend Functions */ |
||||
#define GL_BLEND_DST_RGB 0x80C8 |
||||
#define GL_BLEND_SRC_RGB 0x80C9 |
||||
#define GL_BLEND_DST_ALPHA 0x80CA |
||||
#define GL_BLEND_SRC_ALPHA 0x80CB |
||||
#define GL_CONSTANT_COLOR 0x8001 |
||||
#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 |
||||
#define GL_CONSTANT_ALPHA 0x8003 |
||||
#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 |
||||
#define GL_BLEND_COLOR 0x8005 |
||||
|
||||
/* Buffer Objects */ |
||||
#define GL_ARRAY_BUFFER 0x8892 |
||||
#define GL_ELEMENT_ARRAY_BUFFER 0x8893 |
||||
#define GL_ARRAY_BUFFER_BINDING 0x8894 |
||||
#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 |
||||
|
||||
#define GL_STREAM_DRAW 0x88E0 |
||||
#define GL_STATIC_DRAW 0x88E4 |
||||
#define GL_DYNAMIC_DRAW 0x88E8 |
||||
|
||||
#define GL_BUFFER_SIZE 0x8764 |
||||
#define GL_BUFFER_USAGE 0x8765 |
||||
|
||||
#define GL_CURRENT_VERTEX_ATTRIB 0x8626 |
||||
|
||||
/* CullFaceMode */ |
||||
#define GL_FRONT 0x0404 |
||||
#define GL_BACK 0x0405 |
||||
#define GL_FRONT_AND_BACK 0x0408 |
||||
|
||||
/* DepthFunction */ |
||||
/* GL_NEVER */ |
||||
/* GL_LESS */ |
||||
/* GL_EQUAL */ |
||||
/* GL_LEQUAL */ |
||||
/* GL_GREATER */ |
||||
/* GL_NOTEQUAL */ |
||||
/* GL_GEQUAL */ |
||||
/* GL_ALWAYS */ |
||||
|
||||
/* EnableCap */ |
||||
#define GL_TEXTURE_2D 0x0DE1 |
||||
#define GL_CULL_FACE 0x0B44 |
||||
#define GL_BLEND 0x0BE2 |
||||
#define GL_DITHER 0x0BD0 |
||||
#define GL_STENCIL_TEST 0x0B90 |
||||
#define GL_DEPTH_TEST 0x0B71 |
||||
#define GL_SCISSOR_TEST 0x0C11 |
||||
#define GL_POLYGON_OFFSET_FILL 0x8037 |
||||
#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E |
||||
#define GL_SAMPLE_COVERAGE 0x80A0 |
||||
|
||||
/* ErrorCode */ |
||||
#define GL_NO_ERROR 0 |
||||
#define GL_INVALID_ENUM 0x0500 |
||||
#define GL_INVALID_VALUE 0x0501 |
||||
#define GL_INVALID_OPERATION 0x0502 |
||||
#define GL_OUT_OF_MEMORY 0x0505 |
||||
|
||||
/* FrontFaceDirection */ |
||||
#define GL_CW 0x0900 |
||||
#define GL_CCW 0x0901 |
||||
|
||||
/* GetPName */ |
||||
#define GL_LINE_WIDTH 0x0B21 |
||||
#define GL_ALIASED_POINT_SIZE_RANGE 0x846D |
||||
#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E |
||||
#define GL_CULL_FACE_MODE 0x0B45 |
||||
#define GL_FRONT_FACE 0x0B46 |
||||
#define GL_DEPTH_RANGE 0x0B70 |
||||
#define GL_DEPTH_WRITEMASK 0x0B72 |
||||
#define GL_DEPTH_CLEAR_VALUE 0x0B73 |
||||
#define GL_DEPTH_FUNC 0x0B74 |
||||
#define GL_STENCIL_CLEAR_VALUE 0x0B91 |
||||
#define GL_STENCIL_FUNC 0x0B92 |
||||
#define GL_STENCIL_FAIL 0x0B94 |
||||
#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 |
||||
#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 |
||||
#define GL_STENCIL_REF 0x0B97 |
||||
#define GL_STENCIL_VALUE_MASK 0x0B93 |
||||
#define GL_STENCIL_WRITEMASK 0x0B98 |
||||
#define GL_STENCIL_BACK_FUNC 0x8800 |
||||
#define GL_STENCIL_BACK_FAIL 0x8801 |
||||
#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 |
||||
#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 |
||||
#define GL_STENCIL_BACK_REF 0x8CA3 |
||||
#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 |
||||
#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 |
||||
#define GL_VIEWPORT 0x0BA2 |
||||
#define GL_SCISSOR_BOX 0x0C10 |
||||
/* GL_SCISSOR_TEST */ |
||||
#define GL_COLOR_CLEAR_VALUE 0x0C22 |
||||
#define GL_COLOR_WRITEMASK 0x0C23 |
||||
#define GL_UNPACK_ALIGNMENT 0x0CF5 |
||||
#define GL_PACK_ALIGNMENT 0x0D05 |
||||
#define GL_MAX_TEXTURE_SIZE 0x0D33 |
||||
#define GL_MAX_VIEWPORT_DIMS 0x0D3A |
||||
#define GL_SUBPIXEL_BITS 0x0D50 |
||||
#define GL_RED_BITS 0x0D52 |
||||
#define GL_GREEN_BITS 0x0D53 |
||||
#define GL_BLUE_BITS 0x0D54 |
||||
#define GL_ALPHA_BITS 0x0D55 |
||||
#define GL_DEPTH_BITS 0x0D56 |
||||
#define GL_STENCIL_BITS 0x0D57 |
||||
#define GL_POLYGON_OFFSET_UNITS 0x2A00 |
||||
/* GL_POLYGON_OFFSET_FILL */ |
||||
#define GL_POLYGON_OFFSET_FACTOR 0x8038 |
||||
#define GL_TEXTURE_BINDING_2D 0x8069 |
||||
#define GL_SAMPLE_BUFFERS 0x80A8 |
||||
#define GL_SAMPLES 0x80A9 |
||||
#define GL_SAMPLE_COVERAGE_VALUE 0x80AA |
||||
#define GL_SAMPLE_COVERAGE_INVERT 0x80AB |
||||
|
||||
/* GetTextureParameter */ |
||||
/* GL_TEXTURE_MAG_FILTER */ |
||||
/* GL_TEXTURE_MIN_FILTER */ |
||||
/* GL_TEXTURE_WRAP_S */ |
||||
/* GL_TEXTURE_WRAP_T */ |
||||
|
||||
#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 |
||||
#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 |
||||
|
||||
/* HintMode */ |
||||
#define GL_DONT_CARE 0x1100 |
||||
#define GL_FASTEST 0x1101 |
||||
#define GL_NICEST 0x1102 |
||||
|
||||
/* HintTarget */ |
||||
#define GL_GENERATE_MIPMAP_HINT 0x8192 |
||||
|
||||
/* DataType */ |
||||
#define GL_BYTE 0x1400 |
||||
#define GL_UNSIGNED_BYTE 0x1401 |
||||
#define GL_SHORT 0x1402 |
||||
#define GL_UNSIGNED_SHORT 0x1403 |
||||
#define GL_INT 0x1404 |
||||
#define GL_UNSIGNED_INT 0x1405 |
||||
#define GL_FLOAT 0x1406 |
||||
#define GL_FIXED 0x140C |
||||
|
||||
/* PixelFormat */ |
||||
#define GL_DEPTH_COMPONENT 0x1902 |
||||
#define GL_ALPHA 0x1906 |
||||
#define GL_RGB 0x1907 |
||||
#define GL_RGBA 0x1908 |
||||
#define GL_LUMINANCE 0x1909 |
||||
#define GL_LUMINANCE_ALPHA 0x190A |
||||
|
||||
/* PixelType */ |
||||
/* GL_UNSIGNED_BYTE */ |
||||
#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 |
||||
#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 |
||||
#define GL_UNSIGNED_SHORT_5_6_5 0x8363 |
||||
|
||||
/* Shaders */ |
||||
#define GL_FRAGMENT_SHADER 0x8B30 |
||||
#define GL_VERTEX_SHADER 0x8B31 |
||||
#define GL_MAX_VERTEX_ATTRIBS 0x8869 |
||||
#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB |
||||
#define GL_MAX_VARYING_VECTORS 0x8DFC |
||||
#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D |
||||
#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C |
||||
#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 |
||||
#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD |
||||
#define GL_SHADER_TYPE 0x8B4F |
||||
#define GL_DELETE_STATUS 0x8B80 |
||||
#define GL_LINK_STATUS 0x8B82 |
||||
#define GL_VALIDATE_STATUS 0x8B83 |
||||
#define GL_ATTACHED_SHADERS 0x8B85 |
||||
#define GL_ACTIVE_UNIFORMS 0x8B86 |
||||
#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 |
||||
#define GL_ACTIVE_ATTRIBUTES 0x8B89 |
||||
#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A |
||||
#define GL_SHADING_LANGUAGE_VERSION 0x8B8C |
||||
#define GL_CURRENT_PROGRAM 0x8B8D |
||||
|
||||
/* StencilFunction */ |
||||
#define GL_NEVER 0x0200 |
||||
#define GL_LESS 0x0201 |
||||
#define GL_EQUAL 0x0202 |
||||
#define GL_LEQUAL 0x0203 |
||||
#define GL_GREATER 0x0204 |
||||
#define GL_NOTEQUAL 0x0205 |
||||
#define GL_GEQUAL 0x0206 |
||||
#define GL_ALWAYS 0x0207 |
||||
|
||||
/* StencilOp */ |
||||
/* GL_ZERO */ |
||||
#define GL_KEEP 0x1E00 |
||||
#define GL_REPLACE 0x1E01 |
||||
#define GL_INCR 0x1E02 |
||||
#define GL_DECR 0x1E03 |
||||
#define GL_INVERT 0x150A |
||||
#define GL_INCR_WRAP 0x8507 |
||||
#define GL_DECR_WRAP 0x8508 |
||||
|
||||
/* StringName */ |
||||
#define GL_VENDOR 0x1F00 |
||||
#define GL_RENDERER 0x1F01 |
||||
#define GL_VERSION 0x1F02 |
||||
#define GL_EXTENSIONS 0x1F03 |
||||
|
||||
/* TextureMagFilter */ |
||||
#define GL_NEAREST 0x2600 |
||||
#define GL_LINEAR 0x2601 |
||||
|
||||
/* TextureMinFilter */ |
||||
/* GL_NEAREST */ |
||||
/* GL_LINEAR */ |
||||
#define GL_NEAREST_MIPMAP_NEAREST 0x2700 |
||||
#define GL_LINEAR_MIPMAP_NEAREST 0x2701 |
||||
#define GL_NEAREST_MIPMAP_LINEAR 0x2702 |
||||
#define GL_LINEAR_MIPMAP_LINEAR 0x2703 |
||||
|
||||
/* TextureParameterName */ |
||||
#define GL_TEXTURE_MAG_FILTER 0x2800 |
||||
#define GL_TEXTURE_MIN_FILTER 0x2801 |
||||
#define GL_TEXTURE_WRAP_S 0x2802 |
||||
#define GL_TEXTURE_WRAP_T 0x2803 |
||||
|
||||
/* TextureTarget */ |
||||
/* GL_TEXTURE_2D */ |
||||
#define GL_TEXTURE 0x1702 |
||||
|
||||
#define GL_TEXTURE_CUBE_MAP 0x8513 |
||||
#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 |
||||
#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 |
||||
#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 |
||||
#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 |
||||
#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 |
||||
#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 |
||||
#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A |
||||
#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C |
||||
|
||||
/* TextureUnit */ |
||||
#define GL_TEXTURE0 0x84C0 |
||||
#define GL_TEXTURE1 0x84C1 |
||||
#define GL_TEXTURE2 0x84C2 |
||||
#define GL_TEXTURE3 0x84C3 |
||||
#define GL_TEXTURE4 0x84C4 |
||||
#define GL_TEXTURE5 0x84C5 |
||||
#define GL_TEXTURE6 0x84C6 |
||||
#define GL_TEXTURE7 0x84C7 |
||||
#define GL_TEXTURE8 0x84C8 |
||||
#define GL_TEXTURE9 0x84C9 |
||||
#define GL_TEXTURE10 0x84CA |
||||
#define GL_TEXTURE11 0x84CB |
||||
#define GL_TEXTURE12 0x84CC |
||||
#define GL_TEXTURE13 0x84CD |
||||
#define GL_TEXTURE14 0x84CE |
||||
#define GL_TEXTURE15 0x84CF |
||||
#define GL_TEXTURE16 0x84D0 |
||||
#define GL_TEXTURE17 0x84D1 |
||||
#define GL_TEXTURE18 0x84D2 |
||||
#define GL_TEXTURE19 0x84D3 |
||||
#define GL_TEXTURE20 0x84D4 |
||||
#define GL_TEXTURE21 0x84D5 |
||||
#define GL_TEXTURE22 0x84D6 |
||||
#define GL_TEXTURE23 0x84D7 |
||||
#define GL_TEXTURE24 0x84D8 |
||||
#define GL_TEXTURE25 0x84D9 |
||||
#define GL_TEXTURE26 0x84DA |
||||
#define GL_TEXTURE27 0x84DB |
||||
#define GL_TEXTURE28 0x84DC |
||||
#define GL_TEXTURE29 0x84DD |
||||
#define GL_TEXTURE30 0x84DE |
||||
#define GL_TEXTURE31 0x84DF |
||||
#define GL_ACTIVE_TEXTURE 0x84E0 |
||||
|
||||
/* TextureWrapMode */ |
||||
#define GL_REPEAT 0x2901 |
||||
#define GL_CLAMP_TO_EDGE 0x812F |
||||
#define GL_MIRRORED_REPEAT 0x8370 |
||||
|
||||
/* Uniform Types */ |
||||
#define GL_FLOAT_VEC2 0x8B50 |
||||
#define GL_FLOAT_VEC3 0x8B51 |
||||
#define GL_FLOAT_VEC4 0x8B52 |
||||
#define GL_INT_VEC2 0x8B53 |
||||
#define GL_INT_VEC3 0x8B54 |
||||
#define GL_INT_VEC4 0x8B55 |
||||
#define GL_BOOL 0x8B56 |
||||
#define GL_BOOL_VEC2 0x8B57 |
||||
#define GL_BOOL_VEC3 0x8B58 |
||||
#define GL_BOOL_VEC4 0x8B59 |
||||
#define GL_FLOAT_MAT2 0x8B5A |
||||
#define GL_FLOAT_MAT3 0x8B5B |
||||
#define GL_FLOAT_MAT4 0x8B5C |
||||
#define GL_SAMPLER_2D 0x8B5E |
||||
#define GL_SAMPLER_CUBE 0x8B60 |
||||
|
||||
/* Vertex Arrays */ |
||||
#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 |
||||
#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 |
||||
#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 |
||||
#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 |
||||
#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A |
||||
#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 |
||||
#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F |
||||
|
||||
/* Read Format */ |
||||
#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A |
||||
#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B |
||||
|
||||
/* Shader Source */ |
||||
#define GL_COMPILE_STATUS 0x8B81 |
||||
#define GL_INFO_LOG_LENGTH 0x8B84 |
||||
#define GL_SHADER_SOURCE_LENGTH 0x8B88 |
||||
#define GL_SHADER_COMPILER 0x8DFA |
||||
|
||||
/* Shader Binary */ |
||||
#define GL_SHADER_BINARY_FORMATS 0x8DF8 |
||||
#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 |
||||
|
||||
/* Shader Precision-Specified Types */ |
||||
#define GL_LOW_FLOAT 0x8DF0 |
||||
#define GL_MEDIUM_FLOAT 0x8DF1 |
||||
#define GL_HIGH_FLOAT 0x8DF2 |
||||
#define GL_LOW_INT 0x8DF3 |
||||
#define GL_MEDIUM_INT 0x8DF4 |
||||
#define GL_HIGH_INT 0x8DF5 |
||||
|
||||
/* Framebuffer Object. */ |
||||
#define GL_FRAMEBUFFER 0x8D40 |
||||
#define GL_RENDERBUFFER 0x8D41 |
||||
|
||||
#define GL_RGBA4 0x8056 |
||||
#define GL_RGB5_A1 0x8057 |
||||
#define GL_RGB565 0x8D62 |
||||
#define GL_DEPTH_COMPONENT16 0x81A5 |
||||
#define GL_STENCIL_INDEX8 0x8D48 |
||||
|
||||
#define GL_RENDERBUFFER_WIDTH 0x8D42 |
||||
#define GL_RENDERBUFFER_HEIGHT 0x8D43 |
||||
#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 |
||||
#define GL_RENDERBUFFER_RED_SIZE 0x8D50 |
||||
#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 |
||||
#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 |
||||
#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 |
||||
#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 |
||||
#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 |
||||
|
||||
#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 |
||||
#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 |
||||
#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 |
||||
#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 |
||||
|
||||
#define GL_COLOR_ATTACHMENT0 0x8CE0 |
||||
#define GL_DEPTH_ATTACHMENT 0x8D00 |
||||
#define GL_STENCIL_ATTACHMENT 0x8D20 |
||||
|
||||
#define GL_NONE 0 |
||||
|
||||
#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 |
||||
#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 |
||||
#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 |
||||
#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 0x8CD9 |
||||
#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD |
||||
|
||||
#define GL_FRAMEBUFFER_BINDING 0x8CA6 |
||||
#define GL_RENDERBUFFER_BINDING 0x8CA7 |
||||
#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 |
||||
|
||||
#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 |
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* GL core functions. |
||||
*-----------------------------------------------------------------------*/ |
||||
|
||||
GL_APICALL void GL_APIENTRY glActiveTexture (GLenum texture); |
||||
GL_APICALL void GL_APIENTRY glAttachShader (GLuint program, GLuint shader); |
||||
GL_APICALL void GL_APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar* name); |
||||
GL_APICALL void GL_APIENTRY glBindBuffer (GLenum target, GLuint buffer); |
||||
GL_APICALL void GL_APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); |
||||
GL_APICALL void GL_APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); |
||||
GL_APICALL void GL_APIENTRY glBindTexture (GLenum target, GLuint texture); |
||||
GL_APICALL void GL_APIENTRY glBlendColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); |
||||
GL_APICALL void GL_APIENTRY glBlendEquation ( GLenum mode ); |
||||
GL_APICALL void GL_APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); |
||||
GL_APICALL void GL_APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor); |
||||
GL_APICALL void GL_APIENTRY glBlendFuncSeparate (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); |
||||
GL_APICALL void GL_APIENTRY glBufferData (GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); |
||||
GL_APICALL void GL_APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); |
||||
GL_APICALL GLenum GL_APIENTRY glCheckFramebufferStatus (GLenum target); |
||||
GL_APICALL void GL_APIENTRY glClear (GLbitfield mask); |
||||
GL_APICALL void GL_APIENTRY glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); |
||||
GL_APICALL void GL_APIENTRY glClearDepthf (GLclampf depth); |
||||
GL_APICALL void GL_APIENTRY glClearStencil (GLint s); |
||||
GL_APICALL void GL_APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); |
||||
GL_APICALL void GL_APIENTRY glCompileShader (GLuint shader); |
||||
GL_APICALL void GL_APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data); |
||||
GL_APICALL void GL_APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data); |
||||
GL_APICALL void GL_APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); |
||||
GL_APICALL void GL_APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); |
||||
GL_APICALL GLuint GL_APIENTRY glCreateProgram (void); |
||||
GL_APICALL GLuint GL_APIENTRY glCreateShader (GLenum type); |
||||
GL_APICALL void GL_APIENTRY glCullFace (GLenum mode); |
||||
GL_APICALL void GL_APIENTRY glDeleteBuffers (GLsizei n, const GLuint* buffers); |
||||
GL_APICALL void GL_APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint* framebuffers); |
||||
GL_APICALL void GL_APIENTRY glDeleteProgram (GLuint program); |
||||
GL_APICALL void GL_APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint* renderbuffers); |
||||
GL_APICALL void GL_APIENTRY glDeleteShader (GLuint shader); |
||||
GL_APICALL void GL_APIENTRY glDeleteTextures (GLsizei n, const GLuint* textures); |
||||
GL_APICALL void GL_APIENTRY glDepthFunc (GLenum func); |
||||
GL_APICALL void GL_APIENTRY glDepthMask (GLboolean flag); |
||||
GL_APICALL void GL_APIENTRY glDepthRangef (GLclampf zNear, GLclampf zFar); |
||||
GL_APICALL void GL_APIENTRY glDetachShader (GLuint program, GLuint shader); |
||||
GL_APICALL void GL_APIENTRY glDisable (GLenum cap); |
||||
GL_APICALL void GL_APIENTRY glDisableVertexAttribArray (GLuint index); |
||||
GL_APICALL void GL_APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count); |
||||
GL_APICALL void GL_APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid* indices); |
||||
GL_APICALL void GL_APIENTRY glEnable (GLenum cap); |
||||
GL_APICALL void GL_APIENTRY glEnableVertexAttribArray (GLuint index); |
||||
GL_APICALL void GL_APIENTRY glFinish (void); |
||||
GL_APICALL void GL_APIENTRY glFlush (void); |
||||
GL_APICALL void GL_APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); |
||||
GL_APICALL void GL_APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); |
||||
GL_APICALL void GL_APIENTRY glFrontFace (GLenum mode); |
||||
GL_APICALL void GL_APIENTRY glGenBuffers (GLsizei n, GLuint* buffers); |
||||
GL_APICALL void GL_APIENTRY glGenerateMipmap (GLenum target); |
||||
GL_APICALL void GL_APIENTRY glGenFramebuffers (GLsizei n, GLuint* framebuffers); |
||||
GL_APICALL void GL_APIENTRY glGenRenderbuffers (GLsizei n, GLuint* renderbuffers); |
||||
GL_APICALL void GL_APIENTRY glGenTextures (GLsizei n, GLuint* textures); |
||||
GL_APICALL void GL_APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name); |
||||
GL_APICALL void GL_APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name); |
||||
GL_APICALL void GL_APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders); |
||||
GL_APICALL int GL_APIENTRY glGetAttribLocation (GLuint program, const GLchar* name); |
||||
GL_APICALL void GL_APIENTRY glGetBooleanv (GLenum pname, GLboolean* params); |
||||
GL_APICALL void GL_APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint* params); |
||||
GL_APICALL GLenum GL_APIENTRY glGetError (void); |
||||
GL_APICALL void GL_APIENTRY glGetFloatv (GLenum pname, GLfloat* params); |
||||
GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint* params); |
||||
GL_APICALL void GL_APIENTRY glGetIntegerv (GLenum pname, GLint* params); |
||||
GL_APICALL void GL_APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint* params); |
||||
GL_APICALL void GL_APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog); |
||||
GL_APICALL void GL_APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint* params); |
||||
GL_APICALL void GL_APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint* params); |
||||
GL_APICALL void GL_APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog); |
||||
GL_APICALL void GL_APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision); |
||||
GL_APICALL void GL_APIENTRY glGetShaderSource (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source); |
||||
GL_APICALL const GLubyte* GL_APIENTRY glGetString (GLenum name); |
||||
GL_APICALL void GL_APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat* params); |
||||
GL_APICALL void GL_APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint* params); |
||||
GL_APICALL void GL_APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat* params); |
||||
GL_APICALL void GL_APIENTRY glGetUniformiv (GLuint program, GLint location, GLint* params); |
||||
GL_APICALL int GL_APIENTRY glGetUniformLocation (GLuint program, const GLchar* name); |
||||
GL_APICALL void GL_APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat* params); |
||||
GL_APICALL void GL_APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint* params); |
||||
GL_APICALL void GL_APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, GLvoid** pointer); |
||||
GL_APICALL void GL_APIENTRY glHint (GLenum target, GLenum mode); |
||||
GL_APICALL GLboolean GL_APIENTRY glIsBuffer (GLuint buffer); |
||||
GL_APICALL GLboolean GL_APIENTRY glIsEnabled (GLenum cap); |
||||
GL_APICALL GLboolean GL_APIENTRY glIsFramebuffer (GLuint framebuffer); |
||||
GL_APICALL GLboolean GL_APIENTRY glIsProgram (GLuint program); |
||||
GL_APICALL GLboolean GL_APIENTRY glIsRenderbuffer (GLuint renderbuffer); |
||||
GL_APICALL GLboolean GL_APIENTRY glIsShader (GLuint shader); |
||||
GL_APICALL GLboolean GL_APIENTRY glIsTexture (GLuint texture); |
||||
GL_APICALL void GL_APIENTRY glLineWidth (GLfloat width); |
||||
GL_APICALL void GL_APIENTRY glLinkProgram (GLuint program); |
||||
GL_APICALL void GL_APIENTRY glPixelStorei (GLenum pname, GLint param); |
||||
GL_APICALL void GL_APIENTRY glPolygonOffset (GLfloat factor, GLfloat units); |
||||
GL_APICALL void GL_APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels); |
||||
GL_APICALL void GL_APIENTRY glReleaseShaderCompiler (void); |
||||
GL_APICALL void GL_APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); |
||||
GL_APICALL void GL_APIENTRY glSampleCoverage (GLclampf value, GLboolean invert); |
||||
GL_APICALL void GL_APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height); |
||||
GL_APICALL void GL_APIENTRY glShaderBinary (GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length); |
||||
GL_APICALL void GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar* const* string, const GLint* length); |
||||
GL_APICALL void GL_APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask); |
||||
GL_APICALL void GL_APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); |
||||
GL_APICALL void GL_APIENTRY glStencilMask (GLuint mask); |
||||
GL_APICALL void GL_APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); |
||||
GL_APICALL void GL_APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass); |
||||
GL_APICALL void GL_APIENTRY glStencilOpSeparate (GLenum face, GLenum fail, GLenum zfail, GLenum zpass); |
||||
GL_APICALL void GL_APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels); |
||||
GL_APICALL void GL_APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param); |
||||
GL_APICALL void GL_APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat* params); |
||||
GL_APICALL void GL_APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param); |
||||
GL_APICALL void GL_APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint* params); |
||||
GL_APICALL void GL_APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels); |
||||
GL_APICALL void GL_APIENTRY glUniform1f (GLint location, GLfloat x); |
||||
GL_APICALL void GL_APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat* v); |
||||
GL_APICALL void GL_APIENTRY glUniform1i (GLint location, GLint x); |
||||
GL_APICALL void GL_APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint* v); |
||||
GL_APICALL void GL_APIENTRY glUniform2f (GLint location, GLfloat x, GLfloat y); |
||||
GL_APICALL void GL_APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat* v); |
||||
GL_APICALL void GL_APIENTRY glUniform2i (GLint location, GLint x, GLint y); |
||||
GL_APICALL void GL_APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint* v); |
||||
GL_APICALL void GL_APIENTRY glUniform3f (GLint location, GLfloat x, GLfloat y, GLfloat z); |
||||
GL_APICALL void GL_APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat* v); |
||||
GL_APICALL void GL_APIENTRY glUniform3i (GLint location, GLint x, GLint y, GLint z); |
||||
GL_APICALL void GL_APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint* v); |
||||
GL_APICALL void GL_APIENTRY glUniform4f (GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); |
||||
GL_APICALL void GL_APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat* v); |
||||
GL_APICALL void GL_APIENTRY glUniform4i (GLint location, GLint x, GLint y, GLint z, GLint w); |
||||
GL_APICALL void GL_APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint* v); |
||||
GL_APICALL void GL_APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); |
||||
GL_APICALL void GL_APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); |
||||
GL_APICALL void GL_APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); |
||||
GL_APICALL void GL_APIENTRY glUseProgram (GLuint program); |
||||
GL_APICALL void GL_APIENTRY glValidateProgram (GLuint program); |
||||
GL_APICALL void GL_APIENTRY glVertexAttrib1f (GLuint indx, GLfloat x); |
||||
GL_APICALL void GL_APIENTRY glVertexAttrib1fv (GLuint indx, const GLfloat* values); |
||||
GL_APICALL void GL_APIENTRY glVertexAttrib2f (GLuint indx, GLfloat x, GLfloat y); |
||||
GL_APICALL void GL_APIENTRY glVertexAttrib2fv (GLuint indx, const GLfloat* values); |
||||
GL_APICALL void GL_APIENTRY glVertexAttrib3f (GLuint indx, GLfloat x, GLfloat y, GLfloat z); |
||||
GL_APICALL void GL_APIENTRY glVertexAttrib3fv (GLuint indx, const GLfloat* values); |
||||
GL_APICALL void GL_APIENTRY glVertexAttrib4f (GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w); |
||||
GL_APICALL void GL_APIENTRY glVertexAttrib4fv (GLuint indx, const GLfloat* values); |
||||
GL_APICALL void GL_APIENTRY glVertexAttribPointer (GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr); |
||||
GL_APICALL void GL_APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height); |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __gl2_h_ */ |
||||
File diff suppressed because it is too large
Load Diff
@ -1,52 +0,0 @@
|
||||
#ifndef Magnum_Contexts_AbstractWindowContext_h |
||||
#define Magnum_Contexts_AbstractWindowContext_h |
||||
/*
|
||||
Copyright © 2010, 2011, 2012 Vladimír Vondruš <mosra@centrum.cz> |
||||
|
||||
This file is part of Magnum. |
||||
|
||||
Magnum is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU Lesser General Public License version 3 |
||||
only, as published by the Free Software Foundation. |
||||
|
||||
Magnum is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU Lesser General Public License version 3 for more details. |
||||
*/ |
||||
|
||||
/** @file
|
||||
* @brief Class Magnum::Contexts::AbstractWindowContext |
||||
*/ |
||||
|
||||
namespace Magnum { namespace Contexts { |
||||
|
||||
/**
|
||||
@brief Base class for context creation |
||||
|
||||
See subclasses documentation for more information. Context classes subclasses |
||||
are meant to be used directly in `main()`, for example: |
||||
@code |
||||
class MyContext: public Magnum::Contexts::GlutWindowContext { |
||||
// implement required methods...
|
||||
}; |
||||
int main(int argc, char** argv) { |
||||
MyContext c(argc, argv); |
||||
return c.exec(); |
||||
} |
||||
@endcode |
||||
*/ |
||||
class AbstractWindowContext { |
||||
public: |
||||
virtual inline ~AbstractWindowContext() {} |
||||
|
||||
/**
|
||||
* @brief Execute main loop |
||||
* @return Value for returning from `main()`. |
||||
*/ |
||||
virtual int exec() = 0; |
||||
}; |
||||
|
||||
}} |
||||
|
||||
#endif |
||||
@ -1,93 +0,0 @@
|
||||
# Extension wrangler |
||||
add_library(MagnumContextsExtensionWrangler OBJECT ExtensionWrangler.cpp) |
||||
|
||||
set(MagnumContexts_HEADERS |
||||
AbstractContextHandler.h |
||||
AbstractWindowContext.h |
||||
ExtensionWrangler.h) |
||||
install(FILES ${MagnumContexts_HEADERS} DESTINATION ${MAGNUM_INCLUDE_INSTALL_DIR}/Contexts) |
||||
|
||||
# GLUT window context |
||||
if(WITH_GLUTWINDOWCONTEXT) |
||||
find_package(GLUT) |
||||
if(GLUT_FOUND) |
||||
add_library(MagnumGlutWindowContext STATIC |
||||
GlutWindowContext.cpp |
||||
$<TARGET_OBJECTS:MagnumContextsExtensionWrangler>) |
||||
install(FILES GlutWindowContext.h DESTINATION ${MAGNUM_INCLUDE_INSTALL_DIR}/Contexts) |
||||
install(TARGETS MagnumGlutWindowContext DESTINATION ${MAGNUM_LIBRARY_INSTALL_DIR}) |
||||
else() |
||||
message(FATAL_ERROR "GLUT library, required by GlutWindowContext, was not found. Set WITH_GLUTWINDOWCONTEXT to OFF to skip building it.") |
||||
endif() |
||||
endif() |
||||
|
||||
# SDL2 window context |
||||
if(WITH_SDL2WINDOWCONTEXT) |
||||
find_package(SDL2) |
||||
if(SDL2_FOUND) |
||||
include_directories(${SDL2_INCLUDE_DIR}) |
||||
add_library(MagnumSdl2WindowContext STATIC |
||||
Sdl2WindowContext.cpp |
||||
$<TARGET_OBJECTS:MagnumContextsExtensionWrangler>) |
||||
install(FILES Sdl2WindowContext.h DESTINATION ${MAGNUM_INCLUDE_INSTALL_DIR}/Contexts) |
||||
install(TARGETS MagnumSdl2WindowContext DESTINATION ${MAGNUM_LIBRARY_INSTALL_DIR}) |
||||
else() |
||||
message(FATAL_ERROR "SDL2 library, required by Sdl2WindowContext, was not found. Set WITH_SDL2WINDOWCONTEXT to OFF to skip building it.") |
||||
endif() |
||||
endif() |
||||
|
||||
# GLX window context |
||||
if(WITH_GLXWINDOWCONTEXT) |
||||
set(NEED_ABSTRACTXWINDOWCONTEXT 1) |
||||
set(NEED_GLXCONTEXT 1) |
||||
add_library(MagnumGlxWindowContext STATIC |
||||
$<TARGET_OBJECTS:MagnumAbstractXWindowContext> |
||||
$<TARGET_OBJECTS:MagnumGlxContextHandler> |
||||
$<TARGET_OBJECTS:MagnumContextsExtensionWrangler>) |
||||
install(FILES GlxWindowContext.h DESTINATION ${MAGNUM_INCLUDE_INSTALL_DIR}/Contexts) |
||||
install(TARGETS MagnumGlxWindowContext DESTINATION ${MAGNUM_LIBRARY_INSTALL_DIR}) |
||||
endif() |
||||
|
||||
# X/EGL window context |
||||
if(WITH_XEGLWINDOWCONTEXT) |
||||
set(NEED_ABSTRACTXWINDOWCONTEXT 1) |
||||
set(NEED_EGLCONTEXT 1) |
||||
add_library(MagnumXEglWindowContext STATIC |
||||
$<TARGET_OBJECTS:MagnumAbstractXWindowContext> |
||||
$<TARGET_OBJECTS:MagnumEglContextHandler> |
||||
$<TARGET_OBJECTS:MagnumContextsExtensionWrangler>) |
||||
install(FILES XEglWindowContext.h DESTINATION ${MAGNUM_INCLUDE_INSTALL_DIR}/Contexts) |
||||
install(TARGETS MagnumXEglWindowContext DESTINATION ${MAGNUM_LIBRARY_INSTALL_DIR}) |
||||
endif() |
||||
|
||||
# Abstract X window context |
||||
if(NEED_ABSTRACTXWINDOWCONTEXT) |
||||
find_package(X11) |
||||
if(NOT X11_FOUND) |
||||
message(FATAL_ERROR "X11 library, required by some contexts, was not found. Set WITH_*X*WINDOWCONTEXT to OFF to skip building them.") |
||||
endif() |
||||
add_library(MagnumAbstractXWindowContext OBJECT AbstractXWindowContext.cpp) |
||||
# X11 macros are a mess, disable warnings for C-style casts |
||||
set_target_properties(MagnumAbstractXWindowContext PROPERTIES COMPILE_FLAGS "-Wno-old-style-cast") |
||||
install(FILES AbstractXWindowContext.h DESTINATION ${MAGNUM_INCLUDE_INSTALL_DIR}/Contexts) |
||||
endif() |
||||
|
||||
# GLX context |
||||
if(NEED_GLXCONTEXT) |
||||
add_library(MagnumGlxContextHandler OBJECT GlxContextHandler.cpp) |
||||
# X11 macros are a mess, disable warnings for C-style casts |
||||
set_target_properties(MagnumGlxContextHandler PROPERTIES COMPILE_FLAGS "-Wno-old-style-cast") |
||||
install(FILES GlxContextHandler.h DESTINATION ${MAGNUM_INCLUDE_INSTALL_DIR}/Contexts) |
||||
endif() |
||||
|
||||
# EGL context |
||||
if(NEED_EGLCONTEXT) |
||||
find_package(EGL) |
||||
if(NOT EGL_FOUND) |
||||
message(FATAL_ERROR "EGL library, required by some window contexts, was not found. Set WITH_*EGL*WINDOWCONTEXT to OFF to skip building them.") |
||||
endif() |
||||
add_library(MagnumEglContextHandler OBJECT EglContextHandler.cpp) |
||||
# X11 macros are a mess, disable warnings for C-style casts |
||||
set_target_properties(MagnumEglContextHandler PROPERTIES COMPILE_FLAGS "-Wno-old-style-cast") |
||||
install(FILES EglContextHandler.h DESTINATION ${MAGNUM_INCLUDE_INSTALL_DIR}/Contexts) |
||||
endif() |
||||
@ -0,0 +1,104 @@
|
||||
# Extension wrangler |
||||
add_library(MagnumPlatformExtensionWrangler OBJECT ExtensionWrangler.cpp) |
||||
|
||||
set(MagnumPlatform_HEADERS |
||||
AbstractContextHandler.h |
||||
ExtensionWrangler.h) |
||||
install(FILES ${MagnumPlatform_HEADERS} DESTINATION ${MAGNUM_INCLUDE_INSTALL_DIR}/Platform) |
||||
|
||||
# GLUT application |
||||
if(WITH_GLUTAPPLICATION) |
||||
find_package(GLUT) |
||||
if(GLUT_FOUND) |
||||
add_library(MagnumGlutApplication STATIC |
||||
GlutApplication.cpp |
||||
$<TARGET_OBJECTS:MagnumPlatformExtensionWrangler>) |
||||
install(FILES GlutApplication.h DESTINATION ${MAGNUM_INCLUDE_INSTALL_DIR}/Platform) |
||||
install(TARGETS MagnumGlutApplication DESTINATION ${MAGNUM_LIBRARY_INSTALL_DIR}) |
||||
else() |
||||
message(FATAL_ERROR "GLUT library, required by GlutApplication, was not found. Set WITH_GLUTWINDOWCONTEXT to OFF to skip building it.") |
||||
endif() |
||||
endif() |
||||
|
||||
# SDL2 application |
||||
if(WITH_SDL2APPLICATION) |
||||
find_package(SDL2) |
||||
if(SDL2_FOUND) |
||||
include_directories(${SDL2_INCLUDE_DIR}) |
||||
add_library(MagnumSdl2Application STATIC |
||||
Sdl2Application.cpp |
||||
$<TARGET_OBJECTS:MagnumPlatformExtensionWrangler>) |
||||
install(FILES Sdl2Application.h DESTINATION ${MAGNUM_INCLUDE_INSTALL_DIR}/Platform) |
||||
install(TARGETS MagnumSdl2Application DESTINATION ${MAGNUM_LIBRARY_INSTALL_DIR}) |
||||
else() |
||||
message(FATAL_ERROR "SDL2 library, required by Sdl2Application, was not found. Set WITH_SDL2WINDOWCONTEXT to OFF to skip building it.") |
||||
endif() |
||||
endif() |
||||
|
||||
# NaCl application |
||||
if(WITH_NACLAPPLICATION) |
||||
if(NOT ${CMAKE_SYSTEM_NAME} STREQUAL NaCl) |
||||
message(FATAL_ERROR "NaClApplication is available only when targetting Google Chrome Native Client. Set WITH_NACLAPPLICATION to OFF to skip building it.") |
||||
endif() |
||||
|
||||
add_library(MagnumNaClApplication STATIC |
||||
NaClApplication.cpp) |
||||
install(FILES NaClApplication.h DESTINATION ${MAGNUM_INCLUDE_INSTALL_DIR}/Platform) |
||||
install(TARGETS MagnumNaClApplication DESTINATION ${MAGNUM_LIBRARY_INSTALL_DIR}) |
||||
endif() |
||||
|
||||
# GLX application |
||||
if(WITH_GLXAPPLICATION) |
||||
set(NEED_ABSTRACTXAPPLICATION 1) |
||||
set(NEED_GLXCONTEXT 1) |
||||
add_library(MagnumGlxApplication STATIC |
||||
$<TARGET_OBJECTS:MagnumAbstractXApplication> |
||||
$<TARGET_OBJECTS:MagnumGlxContextHandler> |
||||
$<TARGET_OBJECTS:MagnumPlatformExtensionWrangler>) |
||||
install(FILES GlxApplication.h DESTINATION ${MAGNUM_INCLUDE_INSTALL_DIR}/Platform) |
||||
install(TARGETS MagnumGlxApplication DESTINATION ${MAGNUM_LIBRARY_INSTALL_DIR}) |
||||
endif() |
||||
|
||||
# X/EGL window context |
||||
if(WITH_XEGLWINDOWCONTEXT) |
||||
set(NEED_ABSTRACTXAPPLICATION 1) |
||||
set(NEED_EGLCONTEXT 1) |
||||
add_library(MagnumXEglApplication STATIC |
||||
$<TARGET_OBJECTS:MagnumAbstractXApplication> |
||||
$<TARGET_OBJECTS:MagnumEglContextHandler> |
||||
$<TARGET_OBJECTS:MagnumPlatformExtensionWrangler>) |
||||
install(FILES XEglApplication.h DESTINATION ${MAGNUM_INCLUDE_INSTALL_DIR}/Platform) |
||||
install(TARGETS MagnumXEglApplication DESTINATION ${MAGNUM_LIBRARY_INSTALL_DIR}) |
||||
endif() |
||||
|
||||
# Abstract X application |
||||
if(NEED_ABSTRACTXAPPLICATION) |
||||
find_package(X11) |
||||
if(NOT X11_FOUND) |
||||
message(FATAL_ERROR "X11 library, required by some contexts, was not found. Set WITH_*X*WINDOWCONTEXT to OFF to skip building them.") |
||||
endif() |
||||
add_library(MagnumAbstractXApplication OBJECT AbstractXApplication.cpp) |
||||
# X11 macros are a mess, disable warnings for C-style casts |
||||
set_target_properties(MagnumAbstractXApplication PROPERTIES COMPILE_FLAGS "-Wno-old-style-cast") |
||||
install(FILES AbstractXApplication.h DESTINATION ${MAGNUM_INCLUDE_INSTALL_DIR}/Platform) |
||||
endif() |
||||
|
||||
# GLX context |
||||
if(NEED_GLXCONTEXT) |
||||
add_library(MagnumGlxContextHandler OBJECT GlxContextHandler.cpp) |
||||
# X11 macros are a mess, disable warnings for C-style casts |
||||
set_target_properties(MagnumGlxContextHandler PROPERTIES COMPILE_FLAGS "-Wno-old-style-cast") |
||||
install(FILES GlxContextHandler.h DESTINATION ${MAGNUM_INCLUDE_INSTALL_DIR}/Platform) |
||||
endif() |
||||
|
||||
# EGL context |
||||
if(NEED_EGLCONTEXT) |
||||
find_package(EGL) |
||||
if(NOT EGL_FOUND) |
||||
message(FATAL_ERROR "EGL library, required by some window contexts, was not found. Set WITH_*EGL*WINDOWCONTEXT to OFF to skip building them.") |
||||
endif() |
||||
add_library(MagnumEglContextHandler OBJECT EglContextHandler.cpp) |
||||
# X11 macros are a mess, disable warnings for C-style casts |
||||
set_target_properties(MagnumEglContextHandler PROPERTIES COMPILE_FLAGS "-Wno-old-style-cast") |
||||
install(FILES EglContextHandler.h DESTINATION ${MAGNUM_INCLUDE_INSTALL_DIR}/Platform) |
||||
endif() |
||||
@ -0,0 +1,97 @@
|
||||
/*
|
||||
Copyright © 2010, 2011, 2012 Vladimír Vondruš <mosra@centrum.cz> |
||||
|
||||
This file is part of Magnum. |
||||
|
||||
Magnum is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU Lesser General Public License version 3 |
||||
only, as published by the Free Software Foundation. |
||||
|
||||
Magnum is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU Lesser General Public License version 3 for more details. |
||||
*/ |
||||
|
||||
#include "NaClApplication.h" |
||||
|
||||
#include <ppapi/cpp/graphics_3d.h> |
||||
#include <ppapi/lib/gl/gles2/gl2ext_ppapi.h> |
||||
#include <ppapi/cpp/completion_callback.h> |
||||
|
||||
#include "Context.h" |
||||
|
||||
namespace Magnum { namespace Platform { |
||||
|
||||
NaClApplication::NaClApplication(PP_Instance instance, const Math::Vector2<GLsizei>& size): Instance(instance), Graphics3DClient(this), viewportSize(size) { |
||||
int32_t attributes[] = { |
||||
PP_GRAPHICS3DATTRIB_ALPHA_SIZE, 8, |
||||
PP_GRAPHICS3DATTRIB_DEPTH_SIZE, 24, |
||||
PP_GRAPHICS3DATTRIB_STENCIL_SIZE, 8, |
||||
PP_GRAPHICS3DATTRIB_SAMPLES, 0, |
||||
PP_GRAPHICS3DATTRIB_SAMPLE_BUFFERS, 0, |
||||
PP_GRAPHICS3DATTRIB_WIDTH, size.x(), |
||||
PP_GRAPHICS3DATTRIB_HEIGHT, size.y(), |
||||
PP_GRAPHICS3DATTRIB_NONE |
||||
}; |
||||
|
||||
graphics = new pp::Graphics3D(this, attributes); |
||||
if(graphics->is_null()) { |
||||
Error() << "Platform::NaClApplication::NaClApplication(): cannot create graphics"; |
||||
exit(1); |
||||
} |
||||
if(!BindGraphics(*graphics)) { |
||||
Error() << "Platform::NaClApplication::NaClApplication(): cannot bind graphics"; |
||||
exit(1); |
||||
} |
||||
|
||||
glSetCurrentContextPPAPI(graphics->pp_resource()); |
||||
|
||||
c = new Context; |
||||
} |
||||
|
||||
NaClApplication::~NaClApplication() { |
||||
delete c; |
||||
delete graphics; |
||||
} |
||||
|
||||
void NaClApplication::DidChangeView(const pp::View& view) { |
||||
Math::Vector2<GLsizei> size(view.GetRect().width(), view.GetRect().height()); |
||||
|
||||
/* Canvas resized */ |
||||
if(viewportSize != size) { |
||||
graphics->ResizeBuffers(size.x(), size.y()); |
||||
viewportSize = size; |
||||
flags |= Flag::ViewportUpdated; |
||||
} |
||||
|
||||
/* Update viewport, if changed */ |
||||
if(!(flags & Flag::ViewportUpdated)) { |
||||
flags &= ~Flag::ViewportUpdated; |
||||
viewportEvent(size); |
||||
} |
||||
|
||||
drawEvent(); |
||||
} |
||||
|
||||
void NaClApplication::swapBuffers() { |
||||
/* Swap already in progress, do nothing */ |
||||
if(flags & Flag::SwapInProgress) return; |
||||
|
||||
/* Swap buffers and call swapCallback() when done */ |
||||
flags |= Flag::SwapInProgress; |
||||
graphics->SwapBuffers(pp::CompletionCallback(&swapCallback, this)); |
||||
} |
||||
|
||||
void NaClApplication::swapCallback(void* applicationInstance, std::int32_t) { |
||||
NaClApplication* instance = static_cast<NaClApplication*>(applicationInstance); |
||||
instance->flags &= ~Flag::SwapInProgress; |
||||
|
||||
/* Redraw, if requested */ |
||||
if(instance->flags & Flag::Redraw) { |
||||
instance->flags &= ~Flag::Redraw; |
||||
instance->drawEvent(); |
||||
} |
||||
} |
||||
|
||||
}} |
||||
@ -0,0 +1,175 @@
|
||||
#ifndef Magnum_Platform_NaClApplication_h |
||||
#define Magnum_Platform_NaClApplication_h |
||||
/*
|
||||
Copyright © 2010, 2011, 2012 Vladimír Vondruš <mosra@centrum.cz> |
||||
|
||||
This file is part of Magnum. |
||||
|
||||
Magnum is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU Lesser General Public License version 3 |
||||
only, as published by the Free Software Foundation. |
||||
|
||||
Magnum is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU Lesser General Public License version 3 for more details. |
||||
*/ |
||||
|
||||
/** @file
|
||||
* @brief Class Magnum::Platform::NaClApplication |
||||
*/ |
||||
|
||||
#include <string> |
||||
#include <Containers/EnumSet.h> |
||||
#include <ppapi/cpp/instance.h> |
||||
#include <ppapi/cpp/instance_handle.h> |
||||
#include <ppapi/cpp/module.h> |
||||
#include <ppapi/cpp/graphics_3d_client.h> |
||||
#include <ppapi/gles2/gl2ext_ppapi.h> |
||||
|
||||
#include "Math/Vector2.h" |
||||
#include "Magnum.h" |
||||
|
||||
#include "magnumCompatibility.h" |
||||
|
||||
namespace pp { |
||||
class Graphics3D; |
||||
} |
||||
|
||||
namespace Magnum { |
||||
|
||||
class Context; |
||||
|
||||
namespace Platform { |
||||
|
||||
/** @nosubgrouping
|
||||
@brief NaCl application |
||||
|
||||
@section NaClApplication-usage Usage |
||||
|
||||
You need to implement at least drawEvent() and viewportEvent() to be able to |
||||
draw on the screen. The subclass must be then registered to NaCl API using |
||||
MAGNUM_NACLAPPLICATION_MAIN() macro. |
||||
@code |
||||
class MyApplication: public Magnum::Platform::Sdl2Application { |
||||
// implement required methods...
|
||||
}; |
||||
MAGNUM_NACLAPPLICATION_MAIN(MyApplication) |
||||
@endcode |
||||
*/ |
||||
class NaClApplication: public pp::Instance, public pp::Graphics3DClient { |
||||
public: |
||||
/**
|
||||
* @brief Constructor |
||||
* @param instance Module instance |
||||
* @param size Rendering size |
||||
* |
||||
* Creates double-buffered RGBA canvas with depth and stencil buffers. |
||||
*/ |
||||
explicit NaClApplication(PP_Instance instance, const Math::Vector2<GLsizei>& size = Math::Vector2<GLsizei>(640, 480)); |
||||
|
||||
~NaClApplication(); |
||||
|
||||
/** @{ @name Drawing functions */ |
||||
|
||||
protected: |
||||
/**
|
||||
* @brief Viewport event |
||||
* |
||||
* Called when viewport size changes. You should pass the new size to |
||||
* Framebuffer::setViewport() or SceneGraph::Camera::setViewport(), |
||||
* if using scene graph. |
||||
*/ |
||||
virtual void viewportEvent(const Math::Vector2<GLsizei>& size) = 0; |
||||
|
||||
/**
|
||||
* @brief Draw event |
||||
* |
||||
* Here implement your drawing functions, such as calling |
||||
* SceneGraph::Camera::draw(). After drawing is finished, call |
||||
* swapBuffers(). If you want to draw immediately again, call also |
||||
* redraw(). |
||||
*/ |
||||
virtual void drawEvent() = 0; |
||||
|
||||
/**
|
||||
* @brief Swap buffers |
||||
* |
||||
* Paints currently rendered framebuffer on screen. |
||||
*/ |
||||
void swapBuffers(); |
||||
|
||||
/**
|
||||
* @brief Redraw immediately |
||||
* |
||||
* Marks the window for redrawing, resulting in call of drawEvent() |
||||
* in the next iteration. |
||||
*/ |
||||
inline void redraw() { |
||||
flags |= Flag::Redraw; |
||||
} |
||||
|
||||
/*@}*/ |
||||
|
||||
private: |
||||
enum class Flag: std::uint8_t { |
||||
ViewportUpdated = 1 << 0, |
||||
SwapInProgress = 1 << 1, |
||||
Redraw = 1 << 2 |
||||
}; |
||||
typedef Corrade::Containers::EnumSet<Flag, std::uint8_t> Flags; |
||||
|
||||
inline void Graphics3DContextLost() override { |
||||
CORRADE_ASSERT(false, "NaClApplication: context unexpectedly lost", ); |
||||
} |
||||
|
||||
void DidChangeView(const pp::View& view) override; |
||||
|
||||
static void swapCallback(void* applicationInstance, std::int32_t); |
||||
|
||||
pp::Graphics3D* graphics; |
||||
Context* c; |
||||
Math::Vector2<GLsizei> viewportSize; |
||||
Flags flags; |
||||
|
||||
CORRADE_ENUMSET_FRIEND_OPERATORS(Flags) |
||||
}; |
||||
|
||||
CORRADE_ENUMSET_OPERATORS(NaClApplication::Flags) |
||||
|
||||
#ifndef DOXYGEN_GENERATING_OUTPUT |
||||
namespace Implementation { |
||||
template<class Application> class NaClModule: public pp::Module { |
||||
public: |
||||
inline ~NaClModule() { |
||||
glTerminatePPAPI(); |
||||
} |
||||
|
||||
inline bool Init() override { |
||||
return glInitializePPAPI(get_browser_interface()) == GL_TRUE; |
||||
} |
||||
|
||||
inline pp::Instance* CreateInstance(PP_Instance instance) { |
||||
return new Application(instance); |
||||
} |
||||
}; |
||||
} |
||||
#endif |
||||
|
||||
/** @hideinitializer
|
||||
@brief Entry point for NaCl application |
||||
@param application Application class name |
||||
|
||||
See NaClApplication for more information. |
||||
*/ |
||||
/* look at that insane placement of __attribute__. WTF. */ |
||||
#define MAGNUM_NACLAPPLICATION_MAIN(application) \ |
||||
namespace pp { \
|
||||
Module __attribute__ ((visibility ("default"))) * CreateModule() { \
|
||||
return new Magnum::Platform::Implementation::NaClModule<application>(); \
|
||||
} \
|
||||
} |
||||
|
||||
}} |
||||
|
||||
#endif |
||||
@ -0,0 +1,75 @@
|
||||
/*
|
||||
Copyright © 2010, 2011, 2012 Vladimír Vondruš <mosra@centrum.cz> |
||||
|
||||
This file is part of Magnum. |
||||
|
||||
Magnum is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU Lesser General Public License version 3 |
||||
only, as published by the Free Software Foundation. |
||||
|
||||
Magnum is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU Lesser General Public License version 3 for more details. |
||||
*/ |
||||
|
||||
#include "VertexColorShader.h" |
||||
|
||||
#include <Utility/Resource.h> |
||||
|
||||
#include "Extensions.h" |
||||
#include "Shader.h" |
||||
|
||||
namespace Magnum { namespace Shaders { |
||||
|
||||
namespace { |
||||
template<std::uint8_t dimensions> struct ShaderName {}; |
||||
|
||||
template<> struct ShaderName<2> { |
||||
constexpr static const char* vertex() { return "VertexColorShader2D.vert"; } |
||||
constexpr static const char* fragment() { return "VertexColorShader2D.frag"; } |
||||
}; |
||||
|
||||
template<> struct ShaderName<3> { |
||||
constexpr static const char* vertex() { return "VertexColorShader3D.vert"; } |
||||
constexpr static const char* fragment() { return "VertexColorShader3D.frag"; } |
||||
}; |
||||
} |
||||
|
||||
template<std::uint8_t dimensions> VertexColorShader<dimensions>::VertexColorShader() { |
||||
Corrade::Utility::Resource rs("MagnumShaders"); |
||||
|
||||
#ifndef MAGNUM_TARGET_GLES |
||||
Version v = Context::current()->supportedVersion({Version::GL320, Version::GL210}); |
||||
#else |
||||
Version v = Context::current()->supportedVersion({Version::GLES300, Version::GLES200}); |
||||
#endif |
||||
|
||||
Shader vertexShader(v, Shader::Type::Vertex); |
||||
vertexShader.addSource(rs.get("compatibility.glsl")); |
||||
vertexShader.addSource(rs.get(ShaderName<dimensions>::vertex())); |
||||
attachShader(vertexShader); |
||||
|
||||
Shader fragmentShader(v, Shader::Type::Fragment); |
||||
fragmentShader.addSource(rs.get("compatibility.glsl")); |
||||
fragmentShader.addSource(rs.get(ShaderName<dimensions>::fragment())); |
||||
attachShader(fragmentShader); |
||||
|
||||
#ifndef MAGNUM_TARGET_GLES |
||||
if(!Context::current()->isExtensionSupported<Extensions::GL::ARB::explicit_attrib_location>()) { |
||||
#else |
||||
if(!Context::current()->isVersionSupported(Version::GLES300)) { |
||||
#endif |
||||
bindAttributeLocation(Position::Location, "position"); |
||||
bindAttributeLocation(Color::Location, "color"); |
||||
} |
||||
|
||||
link(); |
||||
|
||||
transformationProjectionUniform = uniformLocation("transformationProjection"); |
||||
} |
||||
|
||||
template class VertexColorShader<2>; |
||||
template class VertexColorShader<3>; |
||||
|
||||
}} |
||||
@ -0,0 +1,69 @@
|
||||
#ifndef Magnum_Shaders_VertexColorShader_h |
||||
#define Magnum_Shaders_VertexColorShader_h |
||||
/*
|
||||
Copyright © 2010, 2011, 2012 Vladimír Vondruš <mosra@centrum.cz> |
||||
|
||||
This file is part of Magnum. |
||||
|
||||
Magnum is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU Lesser General Public License version 3 |
||||
only, as published by the Free Software Foundation. |
||||
|
||||
Magnum is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU Lesser General Public License version 3 for more details. |
||||
*/ |
||||
|
||||
/** @file
|
||||
* @brief Class Magnum::Shaders::VertexColorShader |
||||
*/ |
||||
|
||||
#include "Math/Matrix3.h" |
||||
#include "Math/Matrix4.h" |
||||
#include "AbstractShaderProgram.h" |
||||
#include "Color.h" |
||||
#include "DimensionTraits.h" |
||||
|
||||
#include "magnumShadersVisibility.h" |
||||
|
||||
namespace Magnum { namespace Shaders { |
||||
|
||||
/**
|
||||
@brief Vertex color shader |
||||
|
||||
Draws vertex-colored mesh. |
||||
@see VertexColorShader2D, VertexColorShader3D |
||||
*/ |
||||
template<std::uint8_t dimensions> class SHADERS_EXPORT VertexColorShader: public AbstractShaderProgram { |
||||
public: |
||||
/** @brief Vertex position */ |
||||
typedef Attribute<0, typename DimensionTraits<dimensions, GLfloat>::PointType> Position; |
||||
|
||||
/** @brief Vertex color */ |
||||
typedef Attribute<1, Math::Point2D<GLfloat>> Color; |
||||
|
||||
VertexColorShader(); |
||||
|
||||
/**
|
||||
* @brief Set transformation and projection |
||||
* @return Pointer to self (for method chaining) |
||||
*/ |
||||
inline VertexColorShader<dimensions>* setTransformationProjection(const typename DimensionTraits<dimensions, GLfloat>::MatrixType& matrix) { |
||||
setUniform(transformationProjectionUniform, matrix); |
||||
return this; |
||||
} |
||||
|
||||
private: |
||||
GLint transformationProjectionUniform; |
||||
}; |
||||
|
||||
/** @brief 2D vertex color shader */ |
||||
typedef VertexColorShader<2> VertexColorShader2D; |
||||
|
||||
/** @brief 3D vertex color shader */ |
||||
typedef VertexColorShader<3> VertexColorShader3D; |
||||
|
||||
}} |
||||
|
||||
#endif |
||||
@ -0,0 +1,14 @@
|
||||
#ifndef NEW_GLSL |
||||
#define in varying |
||||
#define fragmentColor gl_FragColor |
||||
#endif |
||||
|
||||
in lowp vec3 interpolatedColor; |
||||
|
||||
#ifdef NEW_GLSL |
||||
out lowp vec4 fragmentColor; |
||||
#endif |
||||
|
||||
void main() { |
||||
fragmentColor = vec4(interpolatedColor, 1.0); |
||||
} |
||||
@ -0,0 +1,21 @@
|
||||
#ifndef NEW_GLSL |
||||
#define in attribute |
||||
#define out varying |
||||
#endif |
||||
|
||||
uniform highp mat3 transformationProjection; |
||||
|
||||
#ifdef EXPLICIT_ATTRIB_LOCATION |
||||
layout(location = 0) in highp vec3 position; |
||||
layout(location = 1) in lowp vec3 color; |
||||
#else |
||||
in highp vec3 position; |
||||
in lowp vec3 color; |
||||
#endif |
||||
|
||||
out lowp vec3 interpolatedColor; |
||||
|
||||
void main() { |
||||
gl_Position.xywz = vec4(transformationProjection*position, 0.0); |
||||
interpolatedColor = color; |
||||
} |
||||
@ -1,3 +1,4 @@
|
||||
#cmakedefine MAGNUM_TARGET_NACL |
||||
#cmakedefine MAGNUM_TARGET_GLES |
||||
#cmakedefine MAGNUM_TARGET_GLES2 |
||||
#cmakedefine MAGNUM_GCC46_COMPATIBILITY |
||||
|
||||
Loading…
Reference in new issue