#include <SDL.h>
#include <SDL_opengl.h>
#include <math.h>
#include <stdio.h>
#include "escapi.h"
struct SimpleCapParams capture;
int device;
SDL_Window *window;
void render()
{
float tick = SDL_GetTicks() * 0.2f;
int i, j;
glBegin(GL_TRIANGLE_STRIP);
for (j = 0; j < 16; j++)
{
for (i = 0; i < 17; i++)
{
float u, v;
u = i * (1 / 16.0f);
v = j * (1 / 16.0f);
u += (float)((sin((tick + i*100) * 0.012387) * 0.04) * sin(tick * 0.000514382));
v += (float)((cos((tick + j*100) * 0.012387) * 0.04) * sin(tick * 0.000714282));
glTexCoord2f(u, v);
glVertex2f(i * (640 / 16.0f), j * (480 / 16.0f));
u = i * (1 / 16.0f);
v = (j + 1) * (1 / 16.0f);
u += (float)((sin((tick + i*100) * 0.012387) * 0.04) * sin(tick * 0.000514382));
v += (float)((cos((tick + (j + 1)*100) * 0.012387) * 0.04) * sin(tick * 0.000714282));
glTexCoord2f(u, v);
glVertex2f(i * (640 / 16.0f), (j + 1) * (480 / 16.0f));
}
glVertex2f(640, (j + 1) * (480 / 16.0f));
glVertex2f(0, (j + 2) * (480 / 16.0f));
}
glEnd();
SDL_GL_SwapWindow(window);
SDL_Delay(1);
if (isCaptureDone(device))
{
for (i = 0; i < 512 * 512; i++)
capture.mTargetBuf[i] = (capture.mTargetBuf[i] & 0xff00ff00) |
((capture.mTargetBuf[i] & 0xff) << 16) |
((capture.mTargetBuf[i] & 0xff0000) >> 16);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 512, 512, 0, GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*)capture.mTargetBuf);
doCapture(device);
}
}
int main(int argc, char *argv[])
{
device = setupESCAPI();
if (device < 1)
{
printf("Unable to init ESCAPI\n");
exit(1);
}
if (device > 1)
device = 1;
else
device = 0;
capture.mWidth = 512;
capture.mHeight = 512;
capture.mTargetBuf = new int[512 * 512];
initCapture(device,&capture);
doCapture(device);
int width = 640;
int height = 480;
int bpp = 32;
if (SDL_Init(SDL_INIT_EVERYTHING) != 0)
{
printf("Error: %s\n", SDL_GetError());
return -1;
}
atexit(SDL_Quit);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
SDL_DisplayMode current;
SDL_GetCurrentDisplayMode(0, ¤t);
window = SDL_CreateWindow("ESCAPI OpenGL example", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_OPENGL);
SDL_GLContext glcontext = SDL_GL_CreateContext(window);
glViewport(0, 0, 640, 480);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
{
float r = 0, l = 640, b = 480, t = 0, n = -1, f = 1;
float ortho[16] =
{
2 / (r - l), 0, 0, 0,
0, 2 / (t - b), 0, 0,
0, 0, -2/(f-n), 0,
-(r + l) / (r - l), -(t + b) / (t - b), -(f + n) / (f - n), 1
};
glLoadMatrixf(&ortho[0]);
}
glColor3f(1,1,1);
glEnable(GL_TEXTURE_2D);
GLuint texname;
glGenTextures(1,&texname);
glBindTexture(GL_TEXTURE_2D,texname);
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,256,256,0,GL_RGBA,GL_UNSIGNED_BYTE,(GLvoid*)capture.mTargetBuf);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
while (1)
{
render();
SDL_Event event;
while (SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_KEYUP:
switch (event.key.keysym.sym)
{
case SDLK_ESCAPE:
SDL_Quit();
return 0;
break;
}
break;
case SDL_QUIT:
SDL_Quit();
return(0);
}
}
}
return 0;
}