Path: blob/main/test/browser/gl_matrix_identity.c
7085 views
/*1* Copyright 2012 The Emscripten Authors. All rights reserved.2* Emscripten is available under two separate licenses, the MIT license and the3* University of Illinois/NCSA Open Source License. Both these licenses can be4* found in the LICENSE file.5*/67/*8THIS WORK, INCLUDING THE SOURCE CODE, DOCUMENTATION9AND RELATED MEDIA AND DATA, IS PLACED INTO THE PUBLIC DOMAIN.1011THE ORIGINAL AUTHOR IS KYLE FOLEY.1213THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY14OF ANY KIND, NOT EVEN THE IMPLIED WARRANTY OF15MERCHANTABILITY. THE AUTHOR OF THIS SOFTWARE,16ASSUMES _NO_ RESPONSIBILITY FOR ANY CONSEQUENCE17RESULTING FROM THE USE, MODIFICATION, OR18REDISTRIBUTION OF THIS SOFTWARE.19*/2021#ifndef __EMSCRIPTEN__22#define USE_GLEW 123#endif2425#if USE_GLEW26#include "GL/glew.h"27#endif2829#include "SDL/SDL.h"30#if !USE_GLEW31#include "SDL/SDL_opengl.h"32#endif3334#include <stdio.h>35#include <stdlib.h>36#include <string.h>37#include <assert.h>3839void verify() {40int width = 640, height = 480;41unsigned char *data = (unsigned char*)malloc(width*height*4);42glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, data);43int sum = 0;44for (int x = 0; x < width*height*4; x++) {45if (x % 4 != 3) sum += x * data[x];46}47#ifdef __EMSCRIPTEN__48REPORT_RESULT(sum);49#endif50}5152int main(int argc, char *argv[]) {53SDL_Surface *screen;54if ( SDL_Init(SDL_INIT_VIDEO) != 0 ) {55printf("Unable to initialize SDL: %s\n", SDL_GetError());56return 1;57}5859SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );60screen = SDL_SetVideoMode( 640, 480, 24, SDL_OPENGL );61if ( !screen ) {62printf("Unable to set video mode: %s\n", SDL_GetError());63return 1;64}6566// Create a texture6768GLuint texture;69glGenTextures( 1, &texture );70glBindTexture( GL_TEXTURE_2D, texture );71glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );72glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );73GLubyte textureData[] = { 0x7f, 0, 0,740, 0xff, 0,750x7f, 0, 0,760, 0xff, 0};77glPixelStorei(GL_UNPACK_ALIGNMENT, 1);78glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, 2, 2, 0,79GL_RGB, GL_UNSIGNED_BYTE, textureData );808182// BEGIN8384#if USE_GLEW85glewInit();86#endif8788glClearColor( 0, 0, 0.5, 1.0 );89glClear( GL_COLOR_BUFFER_BIT );9091glColor4f(0.8, 0.8, 0.8, 1);9293glDisable(GL_DEPTH_TEST);94glDisable(GL_CULL_FACE);95glEnable(GL_TEXTURE_2D);96glDisable(GL_BLEND);9798const int kRowSize = 20;99GLuint buffer;100glGenBuffers(1, &buffer);101glBindBuffer(GL_ARRAY_BUFFER, buffer);102float fbuf[] = {0, 1, 0, 0, 1,1031, 1, 0, 1, 1,1041, 0, 0, 1, 0,1050, 1, 0, 0, 1,1061, 0, 0, 1, 0,1070, 0, 0, 0, 0};108glBufferData(GL_ARRAY_BUFFER, sizeof(fbuf) * sizeof(float), fbuf, GL_STATIC_DRAW);109110glTexCoordPointer(2, GL_FLOAT, kRowSize, (GLvoid*)(3*4));111glEnableClientState(GL_TEXTURE_COORD_ARRAY);112113glVertexPointer(3, GL_FLOAT, kRowSize, 0);114glEnableClientState(GL_VERTEX_ARRAY);115116glDrawArrays(GL_TRIANGLES, 0, 6);117118glDisableClientState(GL_TEXTURE_COORD_ARRAY);119glDisableClientState(GL_VERTEX_ARRAY);120121// END122123SDL_GL_SwapBuffers();124125verify();126127#ifndef __EMSCRIPTEN__128SDL_Delay(1500);129#endif130131SDL_Quit();132133return 0;134}135136137