mirror of
https://github.com/libsdl-org/SDL.git
synced 2024-11-26 21:33:26 +08:00
reverted opengles removal.
This commit is contained in:
parent
7767e0c5f9
commit
34231f5ba0
1
.gitignore
vendored
1
.gitignore
vendored
@ -118,6 +118,7 @@ test/testgamecontroller
|
||||
test/testgeometry
|
||||
test/testgesture
|
||||
test/testgl2
|
||||
test/testgles
|
||||
test/testgles2
|
||||
test/testhaptic
|
||||
test/testhittesting
|
||||
|
@ -1290,6 +1290,8 @@ if(ANDROID)
|
||||
if(SDL_OPENGLES)
|
||||
set(SDL_VIDEO_OPENGL_EGL 1)
|
||||
set(HAVE_OPENGLES TRUE)
|
||||
set(SDL_VIDEO_OPENGL_ES 1)
|
||||
set(SDL_VIDEO_RENDER_OGL_ES 1)
|
||||
set(SDL_VIDEO_OPENGL_ES2 1)
|
||||
set(SDL_VIDEO_RENDER_OGL_ES2 1)
|
||||
|
||||
@ -2091,7 +2093,11 @@ elseif(APPLE)
|
||||
endif()
|
||||
|
||||
if(SDL_OPENGLES)
|
||||
if(NOT (IOS OR TVOS))
|
||||
if(IOS OR TVOS)
|
||||
set(SDL_FRAMEWORK_OPENGLES 1)
|
||||
set(SDL_VIDEO_OPENGL_ES 1)
|
||||
set(SDL_VIDEO_RENDER_OGL_ES 1)
|
||||
else()
|
||||
set(SDL_VIDEO_OPENGL_EGL 1)
|
||||
endif()
|
||||
set(SDL_VIDEO_OPENGL_ES2 1)
|
||||
@ -2180,6 +2186,9 @@ elseif(APPLE)
|
||||
list(APPEND EXTRA_LDFLAGS "-Wl,-weak_framework,Metal")
|
||||
endif()
|
||||
endif()
|
||||
if(SDL_FRAMEWORK_OPENGLES)
|
||||
list(APPEND EXTRA_LDFLAGS "-Wl,-framework,OpenGLES")
|
||||
endif()
|
||||
if(SDL_FRAMEWORK_QUARTZCORE)
|
||||
if(IOS OR TVOS)
|
||||
list(APPEND EXTRA_LDFLAGS "-Wl,-framework,QuartzCore")
|
||||
@ -2402,6 +2411,8 @@ elseif(VITA)
|
||||
check_include_file(gl4esinit.h HAVE_GL4ES_H)
|
||||
set(SDL_VIDEO_OPENGL_EGL 1)
|
||||
set(HAVE_OPENGLES TRUE)
|
||||
set(SDL_VIDEO_OPENGL_ES 1)
|
||||
set(SDL_VIDEO_RENDER_OGL_ES 1)
|
||||
set(SDL_VIDEO_OPENGL_ES2 1)
|
||||
set(SDL_VIDEO_RENDER_OGL_ES2 1)
|
||||
|
||||
|
@ -100,6 +100,7 @@ HDRS = \
|
||||
SDL_name.h \
|
||||
SDL_opengl.h \
|
||||
SDL_opengl_glext.h \
|
||||
SDL_opengles.h \
|
||||
SDL_opengles2_gl2ext.h \
|
||||
SDL_opengles2_gl2.h \
|
||||
SDL_opengles2_gl2platform.h \
|
||||
|
@ -329,6 +329,7 @@
|
||||
<ClInclude Include="..\..\include\SDL_name.h" />
|
||||
<ClInclude Include="..\..\include\SDL_opengl.h" />
|
||||
<ClInclude Include="..\..\include\SDL_opengl_glext.h" />
|
||||
<ClInclude Include="..\..\include\SDL_opengles.h" />
|
||||
<ClInclude Include="..\..\include\SDL_opengles2.h" />
|
||||
<ClInclude Include="..\..\include\SDL_opengles2_gl2.h" />
|
||||
<ClInclude Include="..\..\include\SDL_opengles2_gl2ext.h" />
|
||||
|
@ -282,6 +282,9 @@
|
||||
<ClInclude Include="..\..\include\SDL_opengl_glext.h">
|
||||
<Filter>API Headers</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\SDL_opengles.h">
|
||||
<Filter>API Headers</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\SDL_opengles2.h">
|
||||
<Filter>API Headers</Filter>
|
||||
</ClInclude>
|
||||
|
@ -253,6 +253,7 @@
|
||||
<ClInclude Include="..\..\include\SDL_name.h" />
|
||||
<ClInclude Include="..\..\include\SDL_opengl.h" />
|
||||
<ClInclude Include="..\..\include\SDL_opengl_glext.h" />
|
||||
<ClInclude Include="..\..\include\SDL_opengles.h" />
|
||||
<ClInclude Include="..\..\include\SDL_opengles2.h" />
|
||||
<ClInclude Include="..\..\include\SDL_opengles2_gl2.h" />
|
||||
<ClInclude Include="..\..\include\SDL_opengles2_gl2ext.h" />
|
||||
|
@ -282,6 +282,9 @@
|
||||
<ClInclude Include="..\..\include\SDL_opengl_glext.h">
|
||||
<Filter>API Headers</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\SDL_opengles.h">
|
||||
<Filter>API Headers</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\SDL_opengles2.h">
|
||||
<Filter>API Headers</Filter>
|
||||
</ClInclude>
|
||||
|
@ -700,6 +700,15 @@ endmacro()
|
||||
# - nada
|
||||
macro(CheckOpenGLES)
|
||||
if(SDL_OPENGLES)
|
||||
check_c_source_compiles("
|
||||
#include <GLES/gl.h>
|
||||
#include <GLES/glext.h>
|
||||
int main (int argc, char** argv) { return 0; }" HAVE_OPENGLES_V1)
|
||||
if(HAVE_OPENGLES_V1)
|
||||
set(HAVE_OPENGLES TRUE)
|
||||
set(SDL_VIDEO_OPENGL_ES 1)
|
||||
set(SDL_VIDEO_RENDER_OGL_ES 1)
|
||||
endif()
|
||||
check_c_source_compiles("
|
||||
#include <GLES2/gl2.h>
|
||||
#include <GLES2/gl2ext.h>
|
||||
|
54
configure
vendored
54
configure
vendored
@ -911,6 +911,7 @@ enable_video_dummy
|
||||
enable_video_offscreen
|
||||
enable_video_opengl
|
||||
enable_video_opengles
|
||||
enable_video_opengles1
|
||||
enable_video_opengles2
|
||||
enable_video_vulkan
|
||||
enable_libudev
|
||||
@ -1705,6 +1706,8 @@ Optional Features:
|
||||
use offscreen video driver [default=yes]
|
||||
--enable-video-opengl include OpenGL support [default=yes]
|
||||
--enable-video-opengles include OpenGL ES support [default=yes]
|
||||
--enable-video-opengles1
|
||||
include OpenGL ES 1.1 support [default=yes]
|
||||
--enable-video-opengles2
|
||||
include OpenGL ES 2.0 support [default=yes]
|
||||
--enable-video-vulkan include Vulkan support [default=yes]
|
||||
@ -24665,6 +24668,14 @@ else $as_nop
|
||||
enable_video_opengles=yes
|
||||
fi
|
||||
|
||||
# Check whether --enable-video-opengles1 was given.
|
||||
if test ${enable_video_opengles1+y}
|
||||
then :
|
||||
enableval=$enable_video_opengles1;
|
||||
else $as_nop
|
||||
enable_video_opengles1=yes
|
||||
fi
|
||||
|
||||
# Check whether --enable-video-opengles2 was given.
|
||||
if test ${enable_video_opengles2+y}
|
||||
then :
|
||||
@ -24755,6 +24766,42 @@ printf "%s\n" "#define SDL_VIDEO_RENDER_OGL 1" >>confdefs.h
|
||||
CheckOpenGLES()
|
||||
{
|
||||
if test x$enable_video = xyes -a x$enable_video_opengles = xyes; then
|
||||
if test x$enable_video_opengles1 = xyes; then
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for OpenGL ES v1 headers" >&5
|
||||
printf %s "checking for OpenGL ES v1 headers... " >&6; }
|
||||
video_opengles_v1=no
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
|
||||
#include <GLES/gl.h>
|
||||
#include <GLES/glext.h>
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
if ac_fn_c_try_compile "$LINENO"
|
||||
then :
|
||||
video_opengles_v1=yes
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $video_opengles_v1" >&5
|
||||
printf "%s\n" "$video_opengles_v1" >&6; }
|
||||
if test x$video_opengles_v1 = xyes; then
|
||||
|
||||
printf "%s\n" "#define SDL_VIDEO_OPENGL_ES 1" >>confdefs.h
|
||||
|
||||
|
||||
printf "%s\n" "#define SDL_VIDEO_RENDER_OGL_ES 1" >>confdefs.h
|
||||
|
||||
SUMMARY_video="${SUMMARY_video} opengl_es1"
|
||||
fi
|
||||
fi
|
||||
|
||||
if test x$enable_video_opengles2 = xyes; then
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for OpenGL ES v2 headers" >&5
|
||||
printf %s "checking for OpenGL ES v2 headers... " >&6; }
|
||||
@ -27930,6 +27977,12 @@ printf "%s\n" "#define SDL_VIDEO_DRIVER_UIKIT 1" >>confdefs.h
|
||||
printf "%s\n" "#define SDL_VIDEO_OPENGL_ES2 1" >>confdefs.h
|
||||
|
||||
|
||||
printf "%s\n" "#define SDL_VIDEO_OPENGL_ES 1" >>confdefs.h
|
||||
|
||||
|
||||
printf "%s\n" "#define SDL_VIDEO_RENDER_OGL_ES 1" >>confdefs.h
|
||||
|
||||
|
||||
printf "%s\n" "#define SDL_VIDEO_RENDER_OGL_ES2 1" >>confdefs.h
|
||||
|
||||
SOURCES="$SOURCES $srcdir/src/video/uikit/*.m"
|
||||
@ -27947,6 +28000,7 @@ printf "%s\n" "#define SDL_VIDEO_RENDER_OGL_ES2 1" >>confdefs.h
|
||||
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,CoreMotion"
|
||||
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,Foundation"
|
||||
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,GameController"
|
||||
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,OpenGLES"
|
||||
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,QuartzCore"
|
||||
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,UIKit"
|
||||
|
||||
|
21
configure.ac
21
configure.ac
@ -2211,6 +2211,9 @@ dnl Check to see if OpenGL ES support is desired
|
||||
AC_ARG_ENABLE(video-opengles,
|
||||
[AS_HELP_STRING([--enable-video-opengles], [include OpenGL ES support [default=yes]])],
|
||||
, enable_video_opengles=yes)
|
||||
AC_ARG_ENABLE(video-opengles1,
|
||||
[AS_HELP_STRING([--enable-video-opengles1], [include OpenGL ES 1.1 support [default=yes]])],
|
||||
, enable_video_opengles1=yes)
|
||||
AC_ARG_ENABLE(video-opengles2,
|
||||
[AS_HELP_STRING([--enable-video-opengles2], [include OpenGL ES 2.0 support [default=yes]])],
|
||||
, enable_video_opengles2=yes)
|
||||
@ -2259,6 +2262,21 @@ dnl Find OpenGL ES
|
||||
CheckOpenGLES()
|
||||
{
|
||||
if test x$enable_video = xyes -a x$enable_video_opengles = xyes; then
|
||||
if test x$enable_video_opengles1 = xyes; then
|
||||
AC_MSG_CHECKING(for OpenGL ES v1 headers)
|
||||
video_opengles_v1=no
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
||||
#include <GLES/gl.h>
|
||||
#include <GLES/glext.h>
|
||||
]],[])], [video_opengles_v1=yes],[])
|
||||
AC_MSG_RESULT($video_opengles_v1)
|
||||
if test x$video_opengles_v1 = xyes; then
|
||||
AC_DEFINE(SDL_VIDEO_OPENGL_ES, 1, [ ])
|
||||
AC_DEFINE(SDL_VIDEO_RENDER_OGL_ES, 1, [ ])
|
||||
SUMMARY_video="${SUMMARY_video} opengl_es1"
|
||||
fi
|
||||
fi
|
||||
|
||||
if test x$enable_video_opengles2 = xyes; then
|
||||
AC_MSG_CHECKING(for OpenGL ES v2 headers)
|
||||
video_opengles_v2=no
|
||||
@ -3966,6 +3984,8 @@ dnl BeOS support removed after SDL 2.0.1. Haiku still works. --ryan.
|
||||
# The iOS platform requires special setup.
|
||||
AC_DEFINE(SDL_VIDEO_DRIVER_UIKIT, 1, [ ])
|
||||
AC_DEFINE(SDL_VIDEO_OPENGL_ES2, 1, [ ])
|
||||
AC_DEFINE(SDL_VIDEO_OPENGL_ES, 1, [ ])
|
||||
AC_DEFINE(SDL_VIDEO_RENDER_OGL_ES, 1, [ ])
|
||||
AC_DEFINE(SDL_VIDEO_RENDER_OGL_ES2, 1, [ ])
|
||||
SOURCES="$SOURCES $srcdir/src/video/uikit/*.m"
|
||||
SUMMARY_video="${SUMMARY_video} uikit"
|
||||
@ -3982,6 +4002,7 @@ dnl BeOS support removed after SDL 2.0.1. Haiku still works. --ryan.
|
||||
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,CoreMotion"
|
||||
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,Foundation"
|
||||
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,GameController"
|
||||
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,OpenGLES"
|
||||
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,QuartzCore"
|
||||
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,UIKit"
|
||||
|
||||
|
@ -637,6 +637,7 @@ EXCLUDE = ../include/SDL_opengles2_gl2ext.h \
|
||||
../include/SDL_opengl_glext.h \
|
||||
../include/SDL_opengles2_gl2.h \
|
||||
../include/SDL_opengles2.h \
|
||||
../include/SDL_opengles.h \
|
||||
../include/SDL_opengl.h \
|
||||
../include/SDL_egl.h \
|
||||
./release_checklist.md \
|
||||
|
@ -434,6 +434,7 @@
|
||||
#cmakedefine SDL_VIDEO_RENDER_D3D11 @SDL_VIDEO_RENDER_D3D11@
|
||||
#cmakedefine SDL_VIDEO_RENDER_D3D12 @SDL_VIDEO_RENDER_D3D12@
|
||||
#cmakedefine SDL_VIDEO_RENDER_OGL @SDL_VIDEO_RENDER_OGL@
|
||||
#cmakedefine SDL_VIDEO_RENDER_OGL_ES @SDL_VIDEO_RENDER_OGL_ES@
|
||||
#cmakedefine SDL_VIDEO_RENDER_OGL_ES2 @SDL_VIDEO_RENDER_OGL_ES2@
|
||||
#cmakedefine SDL_VIDEO_RENDER_METAL @SDL_VIDEO_RENDER_METAL@
|
||||
#cmakedefine SDL_VIDEO_RENDER_VITA_GXM @SDL_VIDEO_RENDER_VITA_GXM@
|
||||
@ -442,6 +443,7 @@
|
||||
|
||||
/* Enable OpenGL support */
|
||||
#cmakedefine SDL_VIDEO_OPENGL @SDL_VIDEO_OPENGL@
|
||||
#cmakedefine SDL_VIDEO_OPENGL_ES @SDL_VIDEO_OPENGL_ES@
|
||||
#cmakedefine SDL_VIDEO_OPENGL_ES2 @SDL_VIDEO_OPENGL_ES2@
|
||||
#cmakedefine SDL_VIDEO_OPENGL_BGL @SDL_VIDEO_OPENGL_BGL@
|
||||
#cmakedefine SDL_VIDEO_OPENGL_CGL @SDL_VIDEO_OPENGL_CGL@
|
||||
|
@ -395,11 +395,13 @@
|
||||
#undef SDL_VIDEO_RENDER_D3D11
|
||||
#undef SDL_VIDEO_RENDER_D3D12
|
||||
#undef SDL_VIDEO_RENDER_OGL
|
||||
#undef SDL_VIDEO_RENDER_OGL_ES
|
||||
#undef SDL_VIDEO_RENDER_OGL_ES2
|
||||
#undef SDL_VIDEO_RENDER_METAL
|
||||
|
||||
/* Enable OpenGL support */
|
||||
#undef SDL_VIDEO_OPENGL
|
||||
#undef SDL_VIDEO_OPENGL_ES
|
||||
#undef SDL_VIDEO_OPENGL_ES2
|
||||
#undef SDL_VIDEO_OPENGL_BGL
|
||||
#undef SDL_VIDEO_OPENGL_CGL
|
||||
|
@ -171,8 +171,10 @@
|
||||
#define SDL_VIDEO_DRIVER_ANDROID 1
|
||||
|
||||
/* Enable OpenGL ES */
|
||||
#define SDL_VIDEO_OPENGL_ES 1
|
||||
#define SDL_VIDEO_OPENGL_ES2 1
|
||||
#define SDL_VIDEO_OPENGL_EGL 1
|
||||
#define SDL_VIDEO_RENDER_OGL_ES 1
|
||||
#define SDL_VIDEO_RENDER_OGL_ES2 1
|
||||
|
||||
/* Enable Vulkan support */
|
||||
|
@ -199,6 +199,7 @@
|
||||
|
||||
/* Enable OpenGL support */
|
||||
/* #undef SDL_VIDEO_OPENGL */
|
||||
/* #undef SDL_VIDEO_OPENGL_ES */
|
||||
#define SDL_VIDEO_OPENGL_ES2 1
|
||||
/* #undef SDL_VIDEO_OPENGL_BGL */
|
||||
/* #undef SDL_VIDEO_OPENGL_CGL */
|
||||
|
@ -176,6 +176,8 @@
|
||||
/* Enable OpenGL ES */
|
||||
#if !TARGET_OS_MACCATALYST
|
||||
#define SDL_VIDEO_OPENGL_ES2 1
|
||||
#define SDL_VIDEO_OPENGL_ES 1
|
||||
#define SDL_VIDEO_RENDER_OGL_ES 1
|
||||
#define SDL_VIDEO_RENDER_OGL_ES2 1
|
||||
#endif
|
||||
|
||||
|
39
include/SDL_opengles.h
Normal file
39
include/SDL_opengles.h
Normal file
@ -0,0 +1,39 @@
|
||||
/*
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file SDL_opengles.h
|
||||
*
|
||||
* This is a simple file to encapsulate the OpenGL ES 1.X API headers.
|
||||
*/
|
||||
#include "SDL_config.h"
|
||||
|
||||
#ifdef __IPHONEOS__
|
||||
#include <OpenGLES/ES1/gl.h>
|
||||
#include <OpenGLES/ES1/glext.h>
|
||||
#else
|
||||
#include <GLES/gl.h>
|
||||
#include <GLES/glext.h>
|
||||
#endif
|
||||
|
||||
#ifndef APIENTRY
|
||||
#define APIENTRY
|
||||
#endif
|
@ -109,6 +109,9 @@ static const SDL_RenderDriver *render_drivers[] = {
|
||||
#if SDL_VIDEO_RENDER_OGL_ES2
|
||||
&GLES2_RenderDriver,
|
||||
#endif
|
||||
#if SDL_VIDEO_RENDER_OGL_ES
|
||||
&GLES_RenderDriver,
|
||||
#endif
|
||||
#if SDL_VIDEO_RENDER_PS2 && !SDL_RENDER_DISABLED
|
||||
&PS2_RenderDriver,
|
||||
#endif
|
||||
|
@ -299,6 +299,7 @@ extern SDL_RenderDriver D3D11_RenderDriver;
|
||||
extern SDL_RenderDriver D3D12_RenderDriver;
|
||||
extern SDL_RenderDriver GL_RenderDriver;
|
||||
extern SDL_RenderDriver GLES2_RenderDriver;
|
||||
extern SDL_RenderDriver GLES_RenderDriver;
|
||||
extern SDL_RenderDriver METAL_RenderDriver;
|
||||
extern SDL_RenderDriver PS2_RenderDriver;
|
||||
extern SDL_RenderDriver PSP_RenderDriver;
|
||||
|
62
src/render/opengles/SDL_glesfuncs.h
Normal file
62
src/render/opengles/SDL_glesfuncs.h
Normal file
@ -0,0 +1,62 @@
|
||||
/*
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
SDL_PROC(void, glBindTexture, (GLenum, GLuint))
|
||||
SDL_PROC(void, glBlendFunc, (GLenum, GLenum))
|
||||
SDL_PROC_OES(void, glBlendEquationOES, (GLenum))
|
||||
SDL_PROC_OES(void, glBlendEquationSeparateOES, (GLenum, GLenum))
|
||||
SDL_PROC_OES(void, glBlendFuncSeparateOES, (GLenum, GLenum, GLenum, GLenum))
|
||||
SDL_PROC(void, glClear, (GLbitfield))
|
||||
SDL_PROC(void, glClearColor, (GLclampf, GLclampf, GLclampf, GLclampf))
|
||||
SDL_PROC(void, glColor4f, (GLfloat, GLfloat, GLfloat, GLfloat))
|
||||
SDL_PROC(void, glColorPointer, (GLint, GLenum, GLsizei, const GLvoid *))
|
||||
SDL_PROC(void, glDeleteTextures, (GLsizei, const GLuint *))
|
||||
SDL_PROC(void, glDisable, (GLenum))
|
||||
SDL_PROC(void, glDisableClientState, (GLenum array))
|
||||
SDL_PROC(void, glDrawArrays, (GLenum, GLint, GLsizei))
|
||||
SDL_PROC_OES(void, glDrawTexfOES, (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat))
|
||||
SDL_PROC(void, glEnable, (GLenum))
|
||||
SDL_PROC(void, glEnableClientState, (GLenum))
|
||||
SDL_PROC(void, glFinish, (void))
|
||||
SDL_PROC_OES(void, glGenFramebuffersOES, (GLsizei, GLuint *))
|
||||
SDL_PROC(void, glGenTextures, (GLsizei, GLuint *))
|
||||
SDL_PROC(GLenum, glGetError, (void))
|
||||
SDL_PROC(void, glGetIntegerv, (GLenum, GLint *))
|
||||
SDL_PROC(void, glLoadIdentity, (void))
|
||||
SDL_PROC(void, glMatrixMode, (GLenum))
|
||||
SDL_PROC(void, glOrthof, (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat))
|
||||
SDL_PROC(void, glPixelStorei, (GLenum, GLint))
|
||||
SDL_PROC(void, glReadPixels, (GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLvoid*))
|
||||
SDL_PROC(void, glScissor, (GLint, GLint, GLsizei, GLsizei))
|
||||
SDL_PROC(void, glTexCoordPointer, (GLint, GLenum, GLsizei, const GLvoid *))
|
||||
SDL_PROC(void, glTexEnvf, (GLenum, GLenum, GLfloat))
|
||||
SDL_PROC(void, glTexImage2D, (GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *))
|
||||
SDL_PROC(void, glTexParameteri, (GLenum, GLenum, GLint))
|
||||
SDL_PROC(void, glTexParameteriv, (GLenum, GLenum, const GLint *))
|
||||
SDL_PROC(void, glTexSubImage2D, (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *))
|
||||
SDL_PROC(void, glVertexPointer, (GLint, GLenum, GLsizei, const GLvoid *))
|
||||
SDL_PROC(void, glViewport, (GLint, GLint, GLsizei, GLsizei))
|
||||
SDL_PROC_OES(void, glBindFramebufferOES, (GLenum, GLuint))
|
||||
SDL_PROC_OES(void, glFramebufferTexture2DOES, (GLenum, GLenum, GLenum, GLuint, GLint))
|
||||
SDL_PROC_OES(GLenum, glCheckFramebufferStatusOES, (GLenum))
|
||||
SDL_PROC_OES(void, glDeleteFramebuffersOES, (GLsizei, const GLuint*))
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
1218
src/render/opengles/SDL_render_gles.c
Normal file
1218
src/render/opengles/SDL_render_gles.c
Normal file
File diff suppressed because it is too large
Load Diff
@ -431,7 +431,7 @@ struct SDL_VideoDevice
|
||||
struct SDL_EGL_VideoData *egl_data;
|
||||
#endif
|
||||
|
||||
#if SDL_VIDEO_OPENGL_ES2
|
||||
#if SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
|
||||
struct SDL_PrivateGLESData *gles_data;
|
||||
#endif
|
||||
|
||||
|
@ -37,6 +37,10 @@
|
||||
#include "SDL_opengl.h"
|
||||
#endif /* SDL_VIDEO_OPENGL */
|
||||
|
||||
#if SDL_VIDEO_OPENGL_ES && !SDL_VIDEO_OPENGL
|
||||
#include "SDL_opengles.h"
|
||||
#endif /* SDL_VIDEO_OPENGL_ES && !SDL_VIDEO_OPENGL */
|
||||
|
||||
/* GL and GLES2 headers conflict on Linux 32 bits */
|
||||
#if SDL_VIDEO_OPENGL_ES2 && !SDL_VIDEO_OPENGL
|
||||
#include "SDL_opengles2.h"
|
||||
@ -3436,7 +3440,7 @@ SDL_GL_UnloadLibrary(void)
|
||||
}
|
||||
}
|
||||
|
||||
#if SDL_VIDEO_OPENGL || SDL_VIDEO_OPENGL_ES2
|
||||
#if SDL_VIDEO_OPENGL || SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
|
||||
static SDL_INLINE SDL_bool
|
||||
isAtLeastGL3(const char *verstr)
|
||||
{
|
||||
@ -3447,7 +3451,7 @@ isAtLeastGL3(const char *verstr)
|
||||
SDL_bool
|
||||
SDL_GL_ExtensionSupported(const char *extension)
|
||||
{
|
||||
#if SDL_VIDEO_OPENGL || SDL_VIDEO_OPENGL_ES2
|
||||
#if SDL_VIDEO_OPENGL || SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
|
||||
const GLubyte *(APIENTRY * glGetStringFunc) (GLenum);
|
||||
const char *extensions;
|
||||
const char *start;
|
||||
@ -3539,7 +3543,7 @@ SDL_GL_DeduceMaxSupportedESProfile(int* major, int* minor)
|
||||
{
|
||||
/* THIS REQUIRES AN EXISTING GL CONTEXT THAT HAS BEEN MADE CURRENT. */
|
||||
/* Please refer to https://bugzilla.libsdl.org/show_bug.cgi?id=3725 for discussion. */
|
||||
#if SDL_VIDEO_OPENGL || SDL_VIDEO_OPENGL_ES2
|
||||
#if SDL_VIDEO_OPENGL || SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
|
||||
/* XXX This is fragile; it will break in the event of release of
|
||||
* new versions of OpenGL ES.
|
||||
*/
|
||||
@ -3593,6 +3597,10 @@ SDL_GL_ResetAttributes()
|
||||
_this->gl_config.major_version = 2;
|
||||
_this->gl_config.minor_version = 0;
|
||||
_this->gl_config.profile_mask = SDL_GL_CONTEXT_PROFILE_ES;
|
||||
#elif SDL_VIDEO_OPENGL_ES
|
||||
_this->gl_config.major_version = 1;
|
||||
_this->gl_config.minor_version = 1;
|
||||
_this->gl_config.profile_mask = SDL_GL_CONTEXT_PROFILE_ES;
|
||||
#endif
|
||||
|
||||
if (_this->GL_DefaultProfileConfig) {
|
||||
@ -3613,7 +3621,7 @@ SDL_GL_ResetAttributes()
|
||||
int
|
||||
SDL_GL_SetAttribute(SDL_GLattr attr, int value)
|
||||
{
|
||||
#if SDL_VIDEO_OPENGL || SDL_VIDEO_OPENGL_ES2
|
||||
#if SDL_VIDEO_OPENGL || SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
|
||||
int retval;
|
||||
|
||||
if (!_this) {
|
||||
@ -3737,7 +3745,7 @@ SDL_GL_SetAttribute(SDL_GLattr attr, int value)
|
||||
int
|
||||
SDL_GL_GetAttribute(SDL_GLattr attr, int *value)
|
||||
{
|
||||
#if SDL_VIDEO_OPENGL || SDL_VIDEO_OPENGL_ES2
|
||||
#if SDL_VIDEO_OPENGL || SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
|
||||
GLenum (APIENTRY *glGetErrorFunc) (void);
|
||||
GLenum attrib = 0;
|
||||
GLenum error = 0;
|
||||
|
@ -148,7 +148,7 @@ UIKit_PumpEvents(_THIS)
|
||||
} while(result == kCFRunLoopRunHandledSource);
|
||||
|
||||
/* See the comment in the function definition. */
|
||||
#if SDL_VIDEO_OPENGL_ES2
|
||||
#if SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
|
||||
UIKit_GL_RestoreCurrentContext();
|
||||
#endif
|
||||
}
|
||||
|
@ -21,7 +21,7 @@
|
||||
#ifndef SDL_uikitopengles_
|
||||
#define SDL_uikitopengles_
|
||||
|
||||
#if SDL_VIDEO_OPENGL_ES2
|
||||
#if SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
|
||||
|
||||
#include "../SDL_sysvideo.h"
|
||||
|
||||
@ -37,7 +37,7 @@ extern int UIKit_GL_LoadLibrary(_THIS, const char *path);
|
||||
|
||||
extern void UIKit_GL_RestoreCurrentContext(void);
|
||||
|
||||
#endif /* SDL_VIDEO_OPENGL_ES2 */
|
||||
#endif // SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
|
||||
|
||||
#endif /* SDL_uikitopengles_ */
|
||||
|
||||
|
@ -20,7 +20,7 @@
|
||||
*/
|
||||
#include "../../SDL_internal.h"
|
||||
|
||||
#if SDL_VIDEO_DRIVER_UIKIT && SDL_VIDEO_OPENGL_ES2
|
||||
#if SDL_VIDEO_DRIVER_UIKIT && (SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2)
|
||||
|
||||
#include "SDL_uikitopengles.h"
|
||||
#import "SDL_uikitopenglview.h"
|
||||
|
@ -19,7 +19,7 @@
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#if SDL_VIDEO_OPENGL_ES2
|
||||
#if SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import <OpenGLES/EAGL.h>
|
||||
@ -59,6 +59,6 @@
|
||||
|
||||
@end
|
||||
|
||||
#endif /* SDL_VIDEO_OPENGL_ES2 */
|
||||
#endif // SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
||||
|
@ -20,7 +20,7 @@
|
||||
*/
|
||||
#include "../../SDL_internal.h"
|
||||
|
||||
#if SDL_VIDEO_DRIVER_UIKIT && SDL_VIDEO_OPENGL_ES2
|
||||
#if SDL_VIDEO_DRIVER_UIKIT && (SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2)
|
||||
|
||||
#include <OpenGLES/EAGLDrawable.h>
|
||||
#include <OpenGLES/ES2/glext.h>
|
||||
|
@ -113,7 +113,7 @@ UIKit_CreateDevice(void)
|
||||
device->HasClipboardText = UIKit_HasClipboardText;
|
||||
|
||||
/* OpenGL (ES) functions */
|
||||
#if SDL_VIDEO_OPENGL_ES2
|
||||
#if SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
|
||||
device->GL_MakeCurrent = UIKit_GL_MakeCurrent;
|
||||
device->GL_GetDrawableSize = UIKit_GL_GetDrawableSize;
|
||||
device->GL_SwapWindow = UIKit_GL_SwapWindow;
|
||||
|
@ -176,7 +176,7 @@ SDL_HideHomeIndicatorHintChanged(void *userdata, const char *name, const char *o
|
||||
/* Don't run the game loop while a messagebox is up */
|
||||
if (!UIKit_ShowingMessageBox()) {
|
||||
/* See the comment in the function definition. */
|
||||
#if SDL_VIDEO_OPENGL_ES2
|
||||
#if SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
|
||||
UIKit_GL_RestoreCurrentContext();
|
||||
#endif
|
||||
|
||||
|
@ -404,7 +404,7 @@ UIKit_GetWindowWMInfo(_THIS, SDL_Window * window, SDL_SysWMinfo * info)
|
||||
|
||||
/* These struct members were added in SDL 2.0.4. */
|
||||
if (versionnum >= SDL_VERSIONNUM(2,0,4)) {
|
||||
#if SDL_VIDEO_OPENGL_ES2
|
||||
#if SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
|
||||
if ([data.viewcontroller.view isKindOfClass:[SDL_uikitopenglview class]]) {
|
||||
SDL_uikitopenglview *glview = (SDL_uikitopenglview *)data.viewcontroller.view;
|
||||
info->info.uikit.framebuffer = glview.drawableFramebuffer;
|
||||
|
@ -648,7 +648,7 @@ X11_CreateWindow(_THIS, SDL_Window * window)
|
||||
}
|
||||
windowdata = (SDL_WindowData *) window->driverdata;
|
||||
|
||||
#if SDL_VIDEO_OPENGL_ES2 || SDL_VIDEO_OPENGL_EGL
|
||||
#if SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2 || SDL_VIDEO_OPENGL_EGL
|
||||
if ((window->flags & SDL_WINDOW_OPENGL) &&
|
||||
((_this->gl_config.profile_mask == SDL_GL_CONTEXT_PROFILE_ES) ||
|
||||
SDL_GetHintBoolean(SDL_HINT_VIDEO_X11_FORCE_EGL, SDL_FALSE))
|
||||
|
@ -125,6 +125,7 @@ add_sdl_test_executable(testgamecontroller NEEDS_RESOURCES testgamecontroller.c
|
||||
add_sdl_test_executable(testgeometry testgeometry.c testutils.c)
|
||||
add_sdl_test_executable(testgesture testgesture.c)
|
||||
add_sdl_test_executable(testgl2 testgl2.c)
|
||||
add_sdl_test_executable(testgles testgles.c)
|
||||
add_sdl_test_executable(testgles2 testgles2.c)
|
||||
add_sdl_test_executable(testhaptic testhaptic.c)
|
||||
add_sdl_test_executable(testhotplug testhotplug.c)
|
||||
|
@ -84,6 +84,7 @@ TARGETS = \
|
||||
|
||||
|
||||
@OPENGL_TARGETS@ += testgl2$(EXE) testshader$(EXE)
|
||||
@OPENGLES1_TARGETS@ += testgles$(EXE)
|
||||
@OPENGLES2_TARGETS@ += testgles2$(EXE)
|
||||
|
||||
|
||||
@ -207,6 +208,9 @@ testgesture$(EXE): $(srcdir)/testgesture.c
|
||||
testgl2$(EXE): $(srcdir)/testgl2.c
|
||||
$(CC) -o $@ $^ $(CFLAGS) $(LIBS) @MATHLIB@
|
||||
|
||||
testgles$(EXE): $(srcdir)/testgles.c
|
||||
$(CC) -o $@ $^ $(CFLAGS) $(LIBS) @GLESLIB@ @MATHLIB@
|
||||
|
||||
testgles2$(EXE): $(srcdir)/testgles2.c
|
||||
$(CC) -o $@ $^ $(CFLAGS) $(LIBS) @MATHLIB@
|
||||
|
||||
|
35
test/configure
vendored
35
test/configure
vendored
@ -624,6 +624,7 @@ GLESLIB
|
||||
GLLIB
|
||||
OPENGL_TARGETS
|
||||
OPENGLES2_TARGETS
|
||||
OPENGLES1_TARGETS
|
||||
CPP
|
||||
XMKMF
|
||||
SDL3_CONFIG
|
||||
@ -4573,6 +4574,33 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_opengl" >&5
|
||||
printf "%s\n" "$have_opengl" >&6; }
|
||||
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for OpenGL ES support" >&5
|
||||
printf %s "checking for OpenGL ES support... " >&6; }
|
||||
have_opengles=no
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
|
||||
#include "SDL_opengles.h"
|
||||
#ifndef SDL_VIDEO_OPENGL_ES
|
||||
#error SDL_VIDEO_OPENGL_ES
|
||||
#endif
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
if ac_fn_c_try_compile "$LINENO"
|
||||
then :
|
||||
have_opengles=yes
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_opengles" >&5
|
||||
printf "%s\n" "$have_opengles" >&6; }
|
||||
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for OpenGL ES2 support" >&5
|
||||
printf %s "checking for OpenGL ES2 support... " >&6; }
|
||||
have_opengles2=no
|
||||
@ -4603,8 +4631,14 @@ printf "%s\n" "$have_opengles2" >&6; }
|
||||
GLLIB=""
|
||||
GLESLIB=""
|
||||
GLES2LIB=""
|
||||
OPENGLES1_TARGETS="UNUSED"
|
||||
OPENGLES2_TARGETS="UNUSED"
|
||||
OPENGL_TARGETS="UNUSED"
|
||||
if test x$have_opengles = xyes; then
|
||||
CFLAGS="$CFLAGS -DHAVE_OPENGLES"
|
||||
GLESLIB="$XPATH -lGLESv1_CM"
|
||||
OPENGLES1_TARGETS="TARGETS"
|
||||
fi
|
||||
if test x$have_opengles2 = xyes; then
|
||||
CFLAGS="$CFLAGS -DHAVE_OPENGLES2"
|
||||
#GLES2LIB="$XPATH -lGLESv2"
|
||||
@ -4783,6 +4817,7 @@ esac
|
||||
|
||||
|
||||
|
||||
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for TTF_Init in -lSDL3_ttf" >&5
|
||||
printf %s "checking for TTF_Init in -lSDL3_ttf... " >&6; }
|
||||
if test ${ac_cv_lib_SDL3_ttf_TTF_Init+y}
|
||||
|
@ -127,6 +127,17 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
||||
]],[])], [have_opengl=yes],[])
|
||||
AC_MSG_RESULT($have_opengl)
|
||||
|
||||
dnl Check for OpenGL ES
|
||||
AC_MSG_CHECKING(for OpenGL ES support)
|
||||
have_opengles=no
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
||||
#include "SDL_opengles.h"
|
||||
#ifndef SDL_VIDEO_OPENGL_ES
|
||||
#error SDL_VIDEO_OPENGL_ES
|
||||
#endif
|
||||
]],[])] ,[have_opengles=yes],[])
|
||||
AC_MSG_RESULT($have_opengles)
|
||||
|
||||
dnl Check for OpenGL ES2
|
||||
AC_MSG_CHECKING(for OpenGL ES2 support)
|
||||
have_opengles2=no
|
||||
@ -141,8 +152,14 @@ AC_MSG_RESULT($have_opengles2)
|
||||
GLLIB=""
|
||||
GLESLIB=""
|
||||
GLES2LIB=""
|
||||
OPENGLES1_TARGETS="UNUSED"
|
||||
OPENGLES2_TARGETS="UNUSED"
|
||||
OPENGL_TARGETS="UNUSED"
|
||||
if test x$have_opengles = xyes; then
|
||||
CFLAGS="$CFLAGS -DHAVE_OPENGLES"
|
||||
GLESLIB="$XPATH -lGLESv1_CM"
|
||||
OPENGLES1_TARGETS="TARGETS"
|
||||
fi
|
||||
if test x$have_opengles2 = xyes; then
|
||||
CFLAGS="$CFLAGS -DHAVE_OPENGLES2"
|
||||
#GLES2LIB="$XPATH -lGLESv2"
|
||||
@ -228,6 +245,7 @@ case "$host" in
|
||||
;;
|
||||
esac
|
||||
|
||||
AC_SUBST(OPENGLES1_TARGETS)
|
||||
AC_SUBST(OPENGLES2_TARGETS)
|
||||
AC_SUBST(OPENGL_TARGETS)
|
||||
AC_SUBST(GLLIB)
|
||||
|
355
test/testgles.c
Normal file
355
test/testgles.c
Normal file
@ -0,0 +1,355 @@
|
||||
/*
|
||||
Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely.
|
||||
*/
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "SDL_test_common.h"
|
||||
|
||||
#if defined(__IPHONEOS__) || defined(__ANDROID__)
|
||||
#define HAVE_OPENGLES
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_OPENGLES
|
||||
|
||||
#include "SDL_opengles.h"
|
||||
|
||||
static SDLTest_CommonState *state;
|
||||
static SDL_GLContext *context = NULL;
|
||||
static int depth = 16;
|
||||
|
||||
/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
|
||||
static void
|
||||
quit(int rc)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (context != NULL) {
|
||||
for (i = 0; i < state->num_windows; i++) {
|
||||
if (context[i]) {
|
||||
SDL_GL_DeleteContext(context[i]);
|
||||
}
|
||||
}
|
||||
|
||||
SDL_free(context);
|
||||
}
|
||||
|
||||
SDLTest_CommonQuit(state);
|
||||
exit(rc);
|
||||
}
|
||||
|
||||
static void
|
||||
Render()
|
||||
{
|
||||
static GLubyte color[8][4] = { {255, 0, 0, 0},
|
||||
{255, 0, 0, 255},
|
||||
{0, 255, 0, 255},
|
||||
{0, 255, 0, 255},
|
||||
{0, 255, 0, 255},
|
||||
{255, 255, 255, 255},
|
||||
{255, 0, 255, 255},
|
||||
{0, 0, 255, 255}
|
||||
};
|
||||
static GLfloat cube[8][3] = { {0.5, 0.5, -0.5},
|
||||
{0.5f, -0.5f, -0.5f},
|
||||
{-0.5f, -0.5f, -0.5f},
|
||||
{-0.5f, 0.5f, -0.5f},
|
||||
{-0.5f, 0.5f, 0.5f},
|
||||
{0.5f, 0.5f, 0.5f},
|
||||
{0.5f, -0.5f, 0.5f},
|
||||
{-0.5f, -0.5f, 0.5f}
|
||||
};
|
||||
static GLubyte indices[36] = { 0, 3, 4,
|
||||
4, 5, 0,
|
||||
0, 5, 6,
|
||||
6, 1, 0,
|
||||
6, 7, 2,
|
||||
2, 1, 6,
|
||||
7, 4, 3,
|
||||
3, 2, 7,
|
||||
5, 4, 7,
|
||||
7, 6, 5,
|
||||
2, 3, 1,
|
||||
3, 0, 1
|
||||
};
|
||||
|
||||
|
||||
/* Do our drawing, too. */
|
||||
glClearColor(0.0, 0.0, 0.0, 1.0);
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
|
||||
/* Draw the cube */
|
||||
glColorPointer(4, GL_UNSIGNED_BYTE, 0, color);
|
||||
glEnableClientState(GL_COLOR_ARRAY);
|
||||
glVertexPointer(3, GL_FLOAT, 0, cube);
|
||||
glEnableClientState(GL_VERTEX_ARRAY);
|
||||
glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_BYTE, indices);
|
||||
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glRotatef(5.0, 1.0, 1.0, 1.0);
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
int fsaa, accel;
|
||||
int value;
|
||||
int i, done;
|
||||
SDL_DisplayMode mode;
|
||||
SDL_Event event;
|
||||
Uint32 then, now, frames;
|
||||
int status;
|
||||
|
||||
/* Enable standard application logging */
|
||||
SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);
|
||||
|
||||
/* Initialize parameters */
|
||||
fsaa = 0;
|
||||
accel = 0;
|
||||
|
||||
/* Initialize test framework */
|
||||
state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO);
|
||||
if (!state) {
|
||||
return 1;
|
||||
}
|
||||
for (i = 1; i < argc;) {
|
||||
int consumed;
|
||||
|
||||
consumed = SDLTest_CommonArg(state, i);
|
||||
if (consumed == 0) {
|
||||
if (SDL_strcasecmp(argv[i], "--fsaa") == 0) {
|
||||
++fsaa;
|
||||
consumed = 1;
|
||||
} else if (SDL_strcasecmp(argv[i], "--accel") == 0) {
|
||||
++accel;
|
||||
consumed = 1;
|
||||
} else if (SDL_strcasecmp(argv[i], "--zdepth") == 0) {
|
||||
i++;
|
||||
if (!argv[i]) {
|
||||
consumed = -1;
|
||||
} else {
|
||||
depth = SDL_atoi(argv[i]);
|
||||
consumed = 1;
|
||||
}
|
||||
} else {
|
||||
consumed = -1;
|
||||
}
|
||||
}
|
||||
if (consumed < 0) {
|
||||
static const char *options[] = { "[--fsaa]", "[--accel]", "[--zdepth %d]", NULL };
|
||||
SDLTest_CommonLogUsage(state, argv[0], options);
|
||||
quit(1);
|
||||
}
|
||||
i += consumed;
|
||||
}
|
||||
|
||||
/* Set OpenGL parameters */
|
||||
state->window_flags |= SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_BORDERLESS;
|
||||
state->gl_red_size = 5;
|
||||
state->gl_green_size = 5;
|
||||
state->gl_blue_size = 5;
|
||||
state->gl_depth_size = depth;
|
||||
state->gl_major_version = 1;
|
||||
state->gl_minor_version = 1;
|
||||
state->gl_profile_mask = SDL_GL_CONTEXT_PROFILE_ES;
|
||||
if (fsaa) {
|
||||
state->gl_multisamplebuffers=1;
|
||||
state->gl_multisamplesamples=fsaa;
|
||||
}
|
||||
if (accel) {
|
||||
state->gl_accelerated=1;
|
||||
}
|
||||
if (!SDLTest_CommonInit(state)) {
|
||||
quit(2);
|
||||
}
|
||||
|
||||
context = (SDL_GLContext *)SDL_calloc(state->num_windows, sizeof(*context));
|
||||
if (context == NULL) {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Out of memory!\n");
|
||||
quit(2);
|
||||
}
|
||||
|
||||
/* Create OpenGL ES contexts */
|
||||
for (i = 0; i < state->num_windows; i++) {
|
||||
context[i] = SDL_GL_CreateContext(state->windows[i]);
|
||||
if (!context[i]) {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_GL_CreateContext(): %s\n", SDL_GetError());
|
||||
quit(2);
|
||||
}
|
||||
}
|
||||
|
||||
if (state->render_flags & SDL_RENDERER_PRESENTVSYNC) {
|
||||
SDL_GL_SetSwapInterval(1);
|
||||
} else {
|
||||
SDL_GL_SetSwapInterval(0);
|
||||
}
|
||||
|
||||
SDL_GetCurrentDisplayMode(0, &mode);
|
||||
SDL_Log("Screen bpp: %d\n", SDL_BITSPERPIXEL(mode.format));
|
||||
SDL_Log("\n");
|
||||
SDL_Log("Vendor : %s\n", glGetString(GL_VENDOR));
|
||||
SDL_Log("Renderer : %s\n", glGetString(GL_RENDERER));
|
||||
SDL_Log("Version : %s\n", glGetString(GL_VERSION));
|
||||
SDL_Log("Extensions : %s\n", glGetString(GL_EXTENSIONS));
|
||||
SDL_Log("\n");
|
||||
|
||||
status = SDL_GL_GetAttribute(SDL_GL_RED_SIZE, &value);
|
||||
if (!status) {
|
||||
SDL_Log("SDL_GL_RED_SIZE: requested %d, got %d\n", 5, value);
|
||||
} else {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_RED_SIZE: %s\n",
|
||||
SDL_GetError());
|
||||
}
|
||||
status = SDL_GL_GetAttribute(SDL_GL_GREEN_SIZE, &value);
|
||||
if (!status) {
|
||||
SDL_Log("SDL_GL_GREEN_SIZE: requested %d, got %d\n", 5, value);
|
||||
} else {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_GREEN_SIZE: %s\n",
|
||||
SDL_GetError());
|
||||
}
|
||||
status = SDL_GL_GetAttribute(SDL_GL_BLUE_SIZE, &value);
|
||||
if (!status) {
|
||||
SDL_Log("SDL_GL_BLUE_SIZE: requested %d, got %d\n", 5, value);
|
||||
} else {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_BLUE_SIZE: %s\n",
|
||||
SDL_GetError());
|
||||
}
|
||||
status = SDL_GL_GetAttribute(SDL_GL_DEPTH_SIZE, &value);
|
||||
if (!status) {
|
||||
SDL_Log("SDL_GL_DEPTH_SIZE: requested %d, got %d\n", depth, value);
|
||||
} else {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_DEPTH_SIZE: %s\n",
|
||||
SDL_GetError());
|
||||
}
|
||||
if (fsaa) {
|
||||
status = SDL_GL_GetAttribute(SDL_GL_MULTISAMPLEBUFFERS, &value);
|
||||
if (!status) {
|
||||
SDL_Log("SDL_GL_MULTISAMPLEBUFFERS: requested 1, got %d\n", value);
|
||||
} else {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_MULTISAMPLEBUFFERS: %s\n",
|
||||
SDL_GetError());
|
||||
}
|
||||
status = SDL_GL_GetAttribute(SDL_GL_MULTISAMPLESAMPLES, &value);
|
||||
if (!status) {
|
||||
SDL_Log("SDL_GL_MULTISAMPLESAMPLES: requested %d, got %d\n", fsaa,
|
||||
value);
|
||||
} else {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_MULTISAMPLESAMPLES: %s\n",
|
||||
SDL_GetError());
|
||||
}
|
||||
}
|
||||
if (accel) {
|
||||
status = SDL_GL_GetAttribute(SDL_GL_ACCELERATED_VISUAL, &value);
|
||||
if (!status) {
|
||||
SDL_Log("SDL_GL_ACCELERATED_VISUAL: requested 1, got %d\n", value);
|
||||
} else {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_ACCELERATED_VISUAL: %s\n",
|
||||
SDL_GetError());
|
||||
}
|
||||
}
|
||||
|
||||
/* Set rendering settings for each context */
|
||||
for (i = 0; i < state->num_windows; ++i) {
|
||||
float aspectAdjust;
|
||||
|
||||
status = SDL_GL_MakeCurrent(state->windows[i], context[i]);
|
||||
if (status) {
|
||||
SDL_Log("SDL_GL_MakeCurrent(): %s\n", SDL_GetError());
|
||||
|
||||
/* Continue for next window */
|
||||
continue;
|
||||
}
|
||||
|
||||
aspectAdjust = (4.0f / 3.0f) / ((float)state->window_w / state->window_h);
|
||||
glViewport(0, 0, state->window_w, state->window_h);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
glOrthof(-2.0, 2.0, -2.0 * aspectAdjust, 2.0 * aspectAdjust, -20.0, 20.0);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glLoadIdentity();
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
glDepthFunc(GL_LESS);
|
||||
glShadeModel(GL_SMOOTH);
|
||||
}
|
||||
|
||||
/* Main render loop */
|
||||
frames = 0;
|
||||
then = SDL_GetTicks();
|
||||
done = 0;
|
||||
while (!done) {
|
||||
/* Check for events */
|
||||
++frames;
|
||||
while (SDL_PollEvent(&event)) {
|
||||
switch (event.type) {
|
||||
case SDL_WINDOWEVENT:
|
||||
switch (event.window.event) {
|
||||
case SDL_WINDOWEVENT_RESIZED:
|
||||
for (i = 0; i < state->num_windows; ++i) {
|
||||
if (event.window.windowID == SDL_GetWindowID(state->windows[i])) {
|
||||
status = SDL_GL_MakeCurrent(state->windows[i], context[i]);
|
||||
if (status) {
|
||||
SDL_Log("SDL_GL_MakeCurrent(): %s\n", SDL_GetError());
|
||||
break;
|
||||
}
|
||||
/* Change view port to the new window dimensions */
|
||||
glViewport(0, 0, event.window.data1, event.window.data2);
|
||||
/* Update window content */
|
||||
Render();
|
||||
SDL_GL_SwapWindow(state->windows[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
SDLTest_CommonEvent(state, &event, &done);
|
||||
}
|
||||
for (i = 0; i < state->num_windows; ++i) {
|
||||
if (state->windows[i] == NULL)
|
||||
continue;
|
||||
status = SDL_GL_MakeCurrent(state->windows[i], context[i]);
|
||||
if (status) {
|
||||
SDL_Log("SDL_GL_MakeCurrent(): %s\n", SDL_GetError());
|
||||
|
||||
/* Continue for next window */
|
||||
continue;
|
||||
}
|
||||
Render();
|
||||
SDL_GL_SwapWindow(state->windows[i]);
|
||||
}
|
||||
}
|
||||
|
||||
/* Print out some timing information */
|
||||
now = SDL_GetTicks();
|
||||
if (now > then) {
|
||||
SDL_Log("%2.2f frames per second\n",
|
||||
((double) frames * 1000) / (now - then));
|
||||
}
|
||||
#if !defined(__ANDROID__)
|
||||
quit(0);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
#else /* HAVE_OPENGLES */
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "No OpenGL ES support on this system\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
#endif /* HAVE_OPENGLES */
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
Loading…
Reference in New Issue
Block a user