use tksdl;
use tkopengl;
int numframesrendered;
float t;
function test() {
}
// (note) strange source layout (multiple "" is due to emacs syntax highlighting..)
String vert_src = "
void main()
{
//gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
gl_Position = ftransform();
//gl_FrontColor = gl_Color;
}
";
String frag_src = "
#version 130
uniform float viewport_sx;
uniform float viewport_sy;
// (note) gl_FragColor / gl_FragData are deprecated since v1.30
out vec4 fragColor;
void main()
{
//fragColor = vec4(1.0, 0.0, 0.0, 1.0);
//fragColor = gl_Color;
fragColor = vec4(gl_FragCoord.x/viewport_sx, gl_FragCoord.y/viewport_sy, 0, 1);
}
";
int program;
int vert;
int frag;
int uni_viewport_sx;
int uni_viewport_sy;
function onDraw() {
float dt=FPS.precision;
// trace "xxx dt="+dt;
glClearColor(0,0,0.2,1);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
if( !(++numframesrendered&127) )
trace "FPS.real="+FPS.real;
zglInitOrtho(-1*2,1*2);
t += dt*0.05;
wrap t 0 2PI;
glUseProgram(program);
glTranslatef(0, sin(t), 0);
glColor3f(0.6,0.7,0.9);
glBegin(GL_QUADS);
glVertex2f(-1,-1);
glVertex2f( 1,-1);
glVertex2f( 1, 1);
glVertex2f(-1, 1);
glEnd();
glUseProgram(0);
// frot+=dt;
// wrap frot 0 360;
}
function onMouse(int _x, int _y, int _cbs, int _nbs) {
//print "x="+_x+" y="+_y+" cbs="+_cbs+" nbs="+_nbs;
}
function onKeyboard(Key _k) {
switch(_k.pressed)
{
case VKEY_ESCAPE:
SDL.exitEventLoop();
break;
}
}
function onReopen() {
String log;
program = glCreateProgram();
vert = glCreateShader(GL_VERTEX_SHADER);
zglShaderSource(vert, vert_src);
glCompileShader(vert);
glGetShaderInfoLog(vert, log);
trace "[...] vertex shader log=\""+log+"\".";
glAttachShader(program, vert);
frag = glCreateShader(GL_FRAGMENT_SHADER);
zglShaderSource(frag, frag_src);
glCompileShader(frag);
glGetShaderInfoLog(frag, log);
trace "[...] fragment shader log=\""+log+"\".";
glAttachShader(program, frag);
glBindFragDataLocation(program, 0, "fragColor");
glLinkProgram(program);
glGetProgramInfoLog(program, log);
trace "[...] program log=\""+log+"\".";
glUseProgram(program);
uni_viewport_sx = glGetUniformLocation(program, "viewport_sx");
uni_viewport_sy = glGetUniformLocation(program, "viewport_sy");
glUniform1f(uni_viewport_sx, Viewport.width);
glUniform1f(uni_viewport_sy, Viewport.height);
}
function main() {
Viewport.openWindow(640, 480);
//Viewport.enableGLError = true;
trace "[...] GL_VENDOR = \"" + glGetString(GL_VENDOR) + "\"";
trace "[...] GL_VERSION = \"" + glGetString(GL_VERSION) + "\"";
trace "[...] GL_SHADING_LANGUAGE_VERSION = \"" + glGetString(GL_SHADING_LANGUAGE_VERSION) + "\"";
use callbacks;
Configuration.debugLevel = 1;
zglLoadExtensions();
FPS.tickInterval=16;
FPS.limit=60;
onReopen();
Viewport.swapInterval(1);
trace "xxx entering eventloop";
SDL.eventLoop();
}