Added support for OpenGL 2.1
This commit is contained in:
parent
3468af213f
commit
4df7a0f2f8
4 changed files with 82 additions and 53 deletions
|
@ -51,6 +51,7 @@ ifeq ($(PLATFORM),PLATFORM_RPI)
|
||||||
else
|
else
|
||||||
# define raylib graphics api to use (OpenGL 1.1 by default)
|
# define raylib graphics api to use (OpenGL 1.1 by default)
|
||||||
GRAPHICS ?= GRAPHICS_API_OPENGL_11
|
GRAPHICS ?= GRAPHICS_API_OPENGL_11
|
||||||
|
#GRAPHICS = GRAPHICS_API_OPENGL_21 # Uncomment to use OpenGL 2.1
|
||||||
#GRAPHICS = GRAPHICS_API_OPENGL_33 # Uncomment to use OpenGL 3.3
|
#GRAPHICS = GRAPHICS_API_OPENGL_33 # Uncomment to use OpenGL 3.3
|
||||||
endif
|
endif
|
||||||
ifeq ($(PLATFORM),PLATFORM_WEB)
|
ifeq ($(PLATFORM),PLATFORM_WEB)
|
||||||
|
|
19
src/core.c
19
src/core.c
|
@ -1481,15 +1481,20 @@ static void InitDisplay(int width, int height)
|
||||||
// with forward compatibility to older OpenGL versions.
|
// with forward compatibility to older OpenGL versions.
|
||||||
// For example, if using OpenGL 1.1, driver can provide a 3.3 context fordward compatible.
|
// For example, if using OpenGL 1.1, driver can provide a 3.3 context fordward compatible.
|
||||||
|
|
||||||
// Check selection OpenGL version (not initialized yet!)
|
if (configFlags & FLAG_MSAA_4X_HINT)
|
||||||
if (rlGetVersion() == OPENGL_33)
|
|
||||||
{
|
{
|
||||||
if (configFlags & FLAG_MSAA_4X_HINT)
|
glfwWindowHint(GLFW_SAMPLES, 4); // Enables multisampling x4 (MSAA), default is 0
|
||||||
{
|
TraceLog(INFO, "Trying to enable MSAA x4");
|
||||||
glfwWindowHint(GLFW_SAMPLES, 4); // Enables multisampling x4 (MSAA), default is 0
|
}
|
||||||
TraceLog(INFO, "Trying to enable MSAA x4");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// Check selection OpenGL version
|
||||||
|
if (rlGetVersion() == OPENGL_21)
|
||||||
|
{
|
||||||
|
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2); // Choose OpenGL major version (just hint)
|
||||||
|
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1); // Choose OpenGL minor version (just hint)
|
||||||
|
}
|
||||||
|
else if (rlGetVersion() == OPENGL_33)
|
||||||
|
{
|
||||||
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); // Choose OpenGL major version (just hint)
|
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); // Choose OpenGL major version (just hint)
|
||||||
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); // Choose OpenGL minor version (just hint)
|
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); // Choose OpenGL minor version (just hint)
|
||||||
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); // Profiles Hint: Only 3.3 and above!
|
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); // Profiles Hint: Only 3.3 and above!
|
||||||
|
|
101
src/rlgl.c
101
src/rlgl.c
|
@ -44,6 +44,10 @@
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(GRAPHICS_API_OPENGL_21)
|
||||||
|
#define GRAPHICS_API_OPENGL_33
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(GRAPHICS_API_OPENGL_33)
|
#if defined(GRAPHICS_API_OPENGL_33)
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
#include <OpenGL/gl3.h> // OpenGL 3 library for OSX
|
#include <OpenGL/gl3.h> // OpenGL 3 library for OSX
|
||||||
|
@ -916,6 +920,8 @@ int rlGetVersion(void)
|
||||||
{
|
{
|
||||||
#if defined(GRAPHICS_API_OPENGL_11)
|
#if defined(GRAPHICS_API_OPENGL_11)
|
||||||
return OPENGL_11;
|
return OPENGL_11;
|
||||||
|
#elif defined(GRAPHICS_API_OPENGL_21)
|
||||||
|
return OPENGL_21;
|
||||||
#elif defined(GRAPHICS_API_OPENGL_33)
|
#elif defined(GRAPHICS_API_OPENGL_33)
|
||||||
return OPENGL_33;
|
return OPENGL_33;
|
||||||
#elif defined(GRAPHICS_API_OPENGL_ES2)
|
#elif defined(GRAPHICS_API_OPENGL_ES2)
|
||||||
|
@ -1213,7 +1219,8 @@ void rlglLoadExtensions(void *loader)
|
||||||
if (!gladLoadGLLoader((GLADloadproc)loader)) TraceLog(WARNING, "GLAD: Cannot load OpenGL extensions");
|
if (!gladLoadGLLoader((GLADloadproc)loader)) TraceLog(WARNING, "GLAD: Cannot load OpenGL extensions");
|
||||||
else TraceLog(INFO, "GLAD: OpenGL extensions loaded successfully");
|
else TraceLog(INFO, "GLAD: OpenGL extensions loaded successfully");
|
||||||
|
|
||||||
if (GLAD_GL_VERSION_3_3) TraceLog(INFO, "OpenGL 3.3 Core profile supported");
|
if (GLAD_GL_VERSION_2_1) TraceLog(INFO, "OpenGL 2.1 profile supported");
|
||||||
|
else if(GLAD_GL_VERSION_3_3) TraceLog(INFO, "OpenGL 3.3 Core profile supported");
|
||||||
else TraceLog(ERROR, "OpenGL 3.3 Core profile not supported");
|
else TraceLog(ERROR, "OpenGL 3.3 Core profile not supported");
|
||||||
|
|
||||||
// With GLAD, we can check if an extension is supported using the GLAD_GL_xxx booleans
|
// With GLAD, we can check if an extension is supported using the GLAD_GL_xxx booleans
|
||||||
|
@ -2752,55 +2759,65 @@ static Shader LoadDefaultShader(void)
|
||||||
Shader shader;
|
Shader shader;
|
||||||
|
|
||||||
// Vertex shader directly defined, no external file required
|
// Vertex shader directly defined, no external file required
|
||||||
#if defined(GRAPHICS_API_OPENGL_33)
|
char vDefaultShaderStr[] =
|
||||||
char vShaderStr[] = "#version 330 \n"
|
#if defined(GRAPHICS_API_OPENGL_21)
|
||||||
"in vec3 vertexPosition; \n"
|
"#version 120 \n"
|
||||||
"in vec2 vertexTexCoord; \n"
|
|
||||||
"in vec4 vertexColor; \n"
|
|
||||||
"out vec2 fragTexCoord; \n"
|
|
||||||
"out vec4 fragColor; \n"
|
|
||||||
#elif defined(GRAPHICS_API_OPENGL_ES2)
|
#elif defined(GRAPHICS_API_OPENGL_ES2)
|
||||||
char vShaderStr[] = "#version 100 \n"
|
"#version 100 \n"
|
||||||
"attribute vec3 vertexPosition; \n"
|
|
||||||
"attribute vec2 vertexTexCoord; \n"
|
|
||||||
"attribute vec4 vertexColor; \n"
|
|
||||||
"varying vec2 fragTexCoord; \n"
|
|
||||||
"varying vec4 fragColor; \n"
|
|
||||||
#endif
|
#endif
|
||||||
"uniform mat4 mvpMatrix; \n"
|
#if defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
"void main() \n"
|
"attribute vec3 vertexPosition; \n"
|
||||||
"{ \n"
|
"attribute vec2 vertexTexCoord; \n"
|
||||||
" fragTexCoord = vertexTexCoord; \n"
|
"attribute vec4 vertexColor; \n"
|
||||||
" fragColor = vertexColor; \n"
|
"varying vec2 fragTexCoord; \n"
|
||||||
" gl_Position = mvpMatrix*vec4(vertexPosition, 1.0); \n"
|
"varying vec4 fragColor; \n"
|
||||||
"} \n";
|
#elif defined(GRAPHICS_API_OPENGL_33)
|
||||||
|
"#version 330 \n"
|
||||||
|
"in vec3 vertexPosition; \n"
|
||||||
|
"in vec2 vertexTexCoord; \n"
|
||||||
|
"in vec4 vertexColor; \n"
|
||||||
|
"out vec2 fragTexCoord; \n"
|
||||||
|
"out vec4 fragColor; \n"
|
||||||
|
#endif
|
||||||
|
"uniform mat4 mvpMatrix; \n"
|
||||||
|
"void main() \n"
|
||||||
|
"{ \n"
|
||||||
|
" fragTexCoord = vertexTexCoord; \n"
|
||||||
|
" fragColor = vertexColor; \n"
|
||||||
|
" gl_Position = mvpMatrix*vec4(vertexPosition, 1.0); \n"
|
||||||
|
"} \n";
|
||||||
|
|
||||||
// Fragment shader directly defined, no external file required
|
// Fragment shader directly defined, no external file required
|
||||||
#if defined(GRAPHICS_API_OPENGL_33)
|
char fDefaultShaderStr[] =
|
||||||
char fShaderStr[] = "#version 330 \n"
|
#if defined(GRAPHICS_API_OPENGL_21)
|
||||||
"in vec2 fragTexCoord; \n"
|
"#version 120 \n"
|
||||||
"in vec4 fragColor; \n"
|
|
||||||
"out vec4 finalColor; \n"
|
|
||||||
#elif defined(GRAPHICS_API_OPENGL_ES2)
|
#elif defined(GRAPHICS_API_OPENGL_ES2)
|
||||||
char fShaderStr[] = "#version 100 \n"
|
"#version 100 \n"
|
||||||
"precision mediump float; \n" // precision required for OpenGL ES2 (WebGL)
|
"precision mediump float; \n" // precision required for OpenGL ES2 (WebGL)
|
||||||
"varying vec2 fragTexCoord; \n"
|
|
||||||
"varying vec4 fragColor; \n"
|
|
||||||
#endif
|
#endif
|
||||||
"uniform sampler2D texture0; \n"
|
#if defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
"uniform vec4 colDiffuse; \n"
|
"varying vec2 fragTexCoord; \n"
|
||||||
"void main() \n"
|
"varying vec4 fragColor; \n"
|
||||||
"{ \n"
|
#elif defined(GRAPHICS_API_OPENGL_33)
|
||||||
#if defined(GRAPHICS_API_OPENGL_33)
|
"#version 330 \n"
|
||||||
" vec4 texelColor = texture(texture0, fragTexCoord); \n"
|
"in vec2 fragTexCoord; \n"
|
||||||
" finalColor = texelColor*colDiffuse*fragColor; \n"
|
"in vec4 fragColor; \n"
|
||||||
#elif defined(GRAPHICS_API_OPENGL_ES2)
|
"out vec4 finalColor; \n"
|
||||||
" vec4 texelColor = texture2D(texture0, fragTexCoord); \n" // NOTE: texture2D() is deprecated on OpenGL 3.3 and ES 3.0
|
|
||||||
" gl_FragColor = texelColor*colDiffuse*fragColor; \n"
|
|
||||||
#endif
|
#endif
|
||||||
"} \n";
|
"uniform sampler2D texture0; \n"
|
||||||
|
"uniform vec4 colDiffuse; \n"
|
||||||
|
"void main() \n"
|
||||||
|
"{ \n"
|
||||||
|
#if defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
|
" vec4 texelColor = texture2D(texture0, fragTexCoord); \n" // NOTE: texture2D() is deprecated on OpenGL 3.3 and ES 3.0
|
||||||
|
" gl_FragColor = texelColor*colDiffuse*fragColor; \n"
|
||||||
|
#elif defined(GRAPHICS_API_OPENGL_33)
|
||||||
|
" vec4 texelColor = texture(texture0, fragTexCoord); \n"
|
||||||
|
" finalColor = texelColor*colDiffuse*fragColor; \n"
|
||||||
|
#endif
|
||||||
|
"} \n";
|
||||||
|
|
||||||
shader.id = LoadShaderProgram(vShaderStr, fShaderStr);
|
shader.id = LoadShaderProgram(vDefaultShaderStr, fDefaultShaderStr);
|
||||||
|
|
||||||
if (shader.id != 0) TraceLog(INFO, "[SHDR ID %i] Default shader loaded successfully", shader.id);
|
if (shader.id != 0) TraceLog(INFO, "[SHDR ID %i] Default shader loaded successfully", shader.id);
|
||||||
else TraceLog(WARNING, "[SHDR ID %i] Default shader could not be loaded", shader.id);
|
else TraceLog(WARNING, "[SHDR ID %i] Default shader could not be loaded", shader.id);
|
||||||
|
|
12
src/rlgl.h
12
src/rlgl.h
|
@ -52,21 +52,27 @@
|
||||||
//#define GRAPHICS_API_OPENGL_ES2 // Only available on PLATFORM_ANDROID or PLATFORM_RPI or PLATFORM_WEB
|
//#define GRAPHICS_API_OPENGL_ES2 // Only available on PLATFORM_ANDROID or PLATFORM_RPI or PLATFORM_WEB
|
||||||
|
|
||||||
// Security check in case no GRAPHICS_API_OPENGL_* defined
|
// Security check in case no GRAPHICS_API_OPENGL_* defined
|
||||||
#if !defined(GRAPHICS_API_OPENGL_11) && !defined(GRAPHICS_API_OPENGL_33) && !defined(GRAPHICS_API_OPENGL_ES2)
|
#if !defined(GRAPHICS_API_OPENGL_11) && !defined(GRAPHICS_API_OPENGL_21) && !defined(GRAPHICS_API_OPENGL_33) && !defined(GRAPHICS_API_OPENGL_ES2)
|
||||||
#define GRAPHICS_API_OPENGL_11
|
#define GRAPHICS_API_OPENGL_11
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Security check in case multiple GRAPHICS_API_OPENGL_* defined
|
// Security check in case multiple GRAPHICS_API_OPENGL_* defined
|
||||||
#if defined(GRAPHICS_API_OPENGL_11)
|
#if defined(GRAPHICS_API_OPENGL_11)
|
||||||
|
#if defined(GRAPHICS_API_OPENGL_21)
|
||||||
|
#undef GRAPHICS_API_OPENGL_21
|
||||||
|
#endif
|
||||||
#if defined(GRAPHICS_API_OPENGL_33)
|
#if defined(GRAPHICS_API_OPENGL_33)
|
||||||
#undef GRAPHICS_API_OPENGL_33
|
#undef GRAPHICS_API_OPENGL_33
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_ES2)
|
||||||
#undef GRAPHICS_API_OPENGL_ES2
|
#undef GRAPHICS_API_OPENGL_ES2
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(GRAPHICS_API_OPENGL_21)
|
||||||
|
#define GRAPHICS_API_OPENGL_33
|
||||||
|
#endif
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Defines and Macros
|
// Defines and Macros
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
@ -90,7 +96,7 @@ typedef enum { RL_PROJECTION, RL_MODELVIEW, RL_TEXTURE } MatrixMode;
|
||||||
|
|
||||||
typedef enum { RL_LINES, RL_TRIANGLES, RL_QUADS } DrawMode;
|
typedef enum { RL_LINES, RL_TRIANGLES, RL_QUADS } DrawMode;
|
||||||
|
|
||||||
typedef enum { OPENGL_11 = 1, OPENGL_33, OPENGL_ES_20 } GlVersion;
|
typedef enum { OPENGL_11 = 1, OPENGL_21, OPENGL_33, OPENGL_ES_20 } GlVersion;
|
||||||
|
|
||||||
#if defined(RLGL_STANDALONE)
|
#if defined(RLGL_STANDALONE)
|
||||||
#ifndef __cplusplus
|
#ifndef __cplusplus
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue