83 строки
2.9 KiB
C++
83 строки
2.9 KiB
C++
#include "SDL/SDL.h"
|
|
|
|
#include <GLES2/gl2.h>
|
|
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
int result = 1; // Success
|
|
#define assert(x) do { if (!(x)) {result = 0; printf("Assertion failure: %s in %s:%d!\n", #x, __FILE__, __LINE__); } } while(0)
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
SDL_Surface *screen;
|
|
|
|
// Slightly different SDL initialization
|
|
if ( SDL_Init(SDL_INIT_VIDEO) != 0 ) {
|
|
printf("Unable to initialize SDL: %s\n", SDL_GetError());
|
|
return 1;
|
|
}
|
|
|
|
screen = SDL_SetVideoMode( 640, 480, 16, SDL_OPENGL ); // *changed*
|
|
if ( !screen ) {
|
|
printf("Unable to set video mode: %s\n", SDL_GetError());
|
|
return 1;
|
|
}
|
|
|
|
// Test that code containing functions related to GLES2 binary shader API will successfully compile ad run
|
|
// (will be nonfunctional no-ops since WebGL doesn't have binary shaders)
|
|
GLuint vs = glCreateShader(GL_VERTEX_SHADER);
|
|
glShaderBinary(1, &vs, 0, 0, 0);
|
|
assert(glGetError() != GL_NO_ERROR);
|
|
|
|
// Calling any of glGet() with null pointer should be detected and not crash.
|
|
// Note that native code can crash when passed a null pointer, and the GL spec does not say anything
|
|
// about this, so we spec that Emscripten GLES2 code should generate GL_INVALID_VALUE.
|
|
glGetBooleanv(GL_ACTIVE_TEXTURE, 0);
|
|
assert(glGetError() == GL_INVALID_VALUE);
|
|
glGetIntegerv(GL_ACTIVE_TEXTURE, 0);
|
|
assert(glGetError() == GL_INVALID_VALUE);
|
|
glGetFloatv(GL_ACTIVE_TEXTURE, 0);
|
|
assert(glGetError() == GL_INVALID_VALUE);
|
|
|
|
GLboolean b = GL_TRUE;
|
|
GLint i = -1;
|
|
GLfloat f = -1.f;
|
|
glGetBooleanv(GL_NUM_SHADER_BINARY_FORMATS, &b);
|
|
assert(glGetError() == GL_NO_ERROR);
|
|
assert(b == GL_FALSE);
|
|
glGetIntegerv(GL_NUM_SHADER_BINARY_FORMATS, &i);
|
|
assert(glGetError() == GL_NO_ERROR);
|
|
assert(i == 0);
|
|
glGetFloatv(GL_NUM_SHADER_BINARY_FORMATS, &f);
|
|
assert(glGetError() == GL_NO_ERROR);
|
|
assert(f == 0.f);
|
|
|
|
// Currently testing that glGetIntegerv(GL_SHADER_BINARY_FORMATS) should be a no-op.
|
|
int formats[10] = { 123 };
|
|
glGetIntegerv(GL_SHADER_BINARY_FORMATS, formats);
|
|
assert(glGetError() == GL_NO_ERROR);
|
|
assert(formats[0] == 123);
|
|
|
|
// Converting enums to booleans or floats would be odd, so test that the following report a GL_INVALID_ENUM.
|
|
glGetBooleanv(GL_SHADER_BINARY_FORMATS, &b);
|
|
assert(glGetError() == GL_INVALID_ENUM);
|
|
glGetFloatv(GL_SHADER_BINARY_FORMATS, &f);
|
|
assert(glGetError() == GL_INVALID_ENUM);
|
|
|
|
// Test that we can query for shader compiler support.
|
|
glGetIntegerv(GL_SHADER_COMPILER, &i);
|
|
assert(glGetError() == GL_NO_ERROR);
|
|
assert(i != 0);
|
|
glGetBooleanv(GL_SHADER_COMPILER, &b);
|
|
assert(glGetError() == GL_NO_ERROR);
|
|
assert(b == GL_TRUE);
|
|
glGetFloatv(GL_SHADER_COMPILER, &f);
|
|
assert(glGetError() == GL_NO_ERROR);
|
|
assert(f == 1.f);
|
|
|
|
#ifdef REPORT_RESULT
|
|
REPORT_RESULT();
|
|
#endif
|
|
}
|