test/testdyngl.c
author Sam Lantinga <slouken@libsdl.org>
Sun, 18 Jul 2004 19:46:38 +0000
changeset 910 4ab6d1fd028f
parent 885 9f6ad2286011
child 990 8e20c48a9c13
permissions -rw-r--r--
Date: Sat, 26 Jun 2004 14:58:42 +0300
From: "Mike Gorchak"
Subject: QNX 6.3 fixes for SDL

Sam, I've added new OpenGL framework for SDL, which appeared in the new QNX version - 6.3. I've leave compatibility with previous QNX versions. And I've moved all GL specific functions to the separate module, like it done for the other platforms.

SDL is now ready for the QNX 6.3 :)
slouken@839
     1
/*
slouken@839
     2
 * Small SDL example to demonstrate dynamically loading 
slouken@839
     3
 * OpenGL lib and functions
slouken@839
     4
 *
slouken@839
     5
 * (FYI it was supposed to look like snow in the wind or something...)
slouken@839
     6
 *
slouken@839
     7
 * Compile with :
slouken@847
     8
 * gcc testdyngl.c `sdl-config --libs --cflags` -o testdyngl -DHAVE_OPENGL
slouken@839
     9
 *
slouken@839
    10
 * You can specify a different OpenGL lib on the command line, i.e. :
slouken@839
    11
 * ./testdyngl  /usr/X11R6/lib/libGL.so.1.2
slouken@839
    12
 * or
slouken@839
    13
 * ./testdyngl  /usr/lib/libGL.so.1.0.4496
slouken@839
    14
 *
slouken@839
    15
 */
slouken@839
    16
slouken@839
    17
#include <stdio.h>
slouken@839
    18
#include <stdlib.h>
slouken@839
    19
slouken@839
    20
#include "SDL.h"
slouken@839
    21
slouken@839
    22
#ifdef HAVE_OPENGL
slouken@839
    23
slouken@839
    24
#include "SDL_opengl.h"
slouken@839
    25
slouken@839
    26
void* get_funcaddr(const char* p)
slouken@839
    27
{
slouken@839
    28
	void* f=SDL_GL_GetProcAddress(p);
slouken@839
    29
	if (f)
slouken@839
    30
	{
slouken@839
    31
		return f;
slouken@839
    32
	}
slouken@839
    33
	else
slouken@839
    34
	{
slouken@839
    35
		printf("Unable to get function pointer for %s\n",p);
slouken@839
    36
		exit(1);
slouken@839
    37
	}
slouken@839
    38
}
slouken@839
    39
slouken@839
    40
typedef struct
slouken@839
    41
{
slouken@885
    42
	void(APIENTRY*glBegin)(GLenum);
slouken@885
    43
	void(APIENTRY*glEnd)();
slouken@885
    44
	void(APIENTRY*glVertex3f)(GLfloat, GLfloat, GLfloat);
slouken@885
    45
	void(APIENTRY*glClearColor)(GLfloat, GLfloat, GLfloat, GLfloat);
slouken@885
    46
	void(APIENTRY*glClear)(GLbitfield);
slouken@885
    47
	void(APIENTRY*glDisable)(GLenum);
slouken@885
    48
	void(APIENTRY*glEnable)(GLenum);
slouken@885
    49
	void(APIENTRY*glColor4ub)(GLubyte,GLubyte,GLubyte,GLubyte);
slouken@885
    50
	void(APIENTRY*glPointSize)(GLfloat);
slouken@885
    51
	void(APIENTRY*glHint)(GLenum,GLenum);
slouken@885
    52
	void(APIENTRY*glBlendFunc)(GLenum,GLenum);
slouken@885
    53
	void(APIENTRY*glMatrixMode)(GLenum);
slouken@885
    54
	void(APIENTRY*glLoadIdentity)();
slouken@885
    55
	void(APIENTRY*glOrtho)(GLdouble,GLdouble,GLdouble,GLdouble,GLdouble,GLdouble);
slouken@885
    56
	void(APIENTRY*glRotatef)(GLfloat,GLfloat,GLfloat,GLfloat);
slouken@885
    57
	void(APIENTRY*glViewport)(GLint,GLint,GLsizei,GLsizei);
slouken@885
    58
	void(APIENTRY*glFogf)(GLenum,GLfloat);
slouken@839
    59
}
slouken@839
    60
glfuncs;
slouken@839
    61
slouken@839
    62
void init_glfuncs(glfuncs* f)
slouken@839
    63
{
slouken@839
    64
	f->glBegin=get_funcaddr("glBegin");
slouken@839
    65
	f->glEnd=get_funcaddr("glEnd");
slouken@839
    66
	f->glVertex3f=get_funcaddr("glVertex3f");
slouken@839
    67
	f->glClearColor=get_funcaddr("glClearColor");
slouken@839
    68
	f->glClear=get_funcaddr("glClear");
slouken@839
    69
	f->glDisable=get_funcaddr("glDisable");
slouken@839
    70
	f->glEnable=get_funcaddr("glEnable");
slouken@839
    71
	f->glColor4ub=get_funcaddr("glColor4ub");
slouken@839
    72
	f->glPointSize=get_funcaddr("glPointSize");
slouken@839
    73
	f->glHint=get_funcaddr("glHint");
slouken@839
    74
	f->glBlendFunc=get_funcaddr("glBlendFunc");
slouken@839
    75
	f->glMatrixMode=get_funcaddr("glMatrixMode");
slouken@839
    76
	f->glLoadIdentity=get_funcaddr("glLoadIdentity");
slouken@839
    77
	f->glOrtho=get_funcaddr("glOrtho");
slouken@839
    78
	f->glRotatef=get_funcaddr("glRotatef");
slouken@839
    79
	f->glViewport=get_funcaddr("glViewport");
slouken@839
    80
	f->glFogf=get_funcaddr("glFogf");
slouken@839
    81
}
slouken@839
    82
slouken@839
    83
#define NB_PIXELS 1000
slouken@839
    84
slouken@839
    85
int main(int argc,char *argv[])
slouken@839
    86
{
slouken@839
    87
	glfuncs f;
slouken@839
    88
	int i;
slouken@839
    89
	SDL_Event event;
slouken@839
    90
	int done=0;
slouken@839
    91
	GLfloat pixels[NB_PIXELS*3];
slouken@910
    92
#if defined(_WIN32)
slouken@842
    93
	char *gl_library = "OpenGL32.DLL";
slouken@910
    94
#elif defined(__QNXNTO__)
slouken@910
    95
	char *gl_library = "libGL.so.3";
slouken@842
    96
#else
slouken@842
    97
	char *gl_library = "libGL.so.1";
slouken@842
    98
#endif
slouken@839
    99
	
slouken@842
   100
	if (argv[1]) {
slouken@842
   101
		gl_library = argv[1];
slouken@839
   102
	}
slouken@839
   103
	
slouken@842
   104
	if (SDL_Init(SDL_INIT_VIDEO)<0)
slouken@839
   105
	{
slouken@839
   106
		printf("Unable to init SDL : %s\n",SDL_GetError());
slouken@839
   107
		exit(1);
slouken@839
   108
	}
slouken@839
   109
	
slouken@839
   110
	if (SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER,1)<0)
slouken@839
   111
	{
slouken@839
   112
		printf("Unable to set GL attribute : %s\n",SDL_GetError());
slouken@839
   113
		exit(1);
slouken@839
   114
	}
slouken@839
   115
	
slouken@842
   116
	if (SDL_GL_LoadLibrary(gl_library)<0)
slouken@839
   117
	{
slouken@839
   118
		printf("Unable to dynamically open GL lib : %s\n",SDL_GetError());
slouken@839
   119
		exit(1);
slouken@839
   120
	}
slouken@839
   121
slouken@839
   122
	if (SDL_SetVideoMode(640,480,0,SDL_OPENGL)==NULL)
slouken@839
   123
	{
slouken@839
   124
		printf("Unable to open video mode : %s\n",SDL_GetError());
slouken@839
   125
		exit(1);
slouken@839
   126
	}
slouken@839
   127
slouken@910
   128
	/* Set the window manager title bar */
slouken@910
   129
	SDL_WM_SetCaption( "SDL Dynamic OpenGL Loading Test", "testdyngl" );
slouken@910
   130
slouken@839
   131
	init_glfuncs(&f);
slouken@839
   132
slouken@839
   133
	for(i=0;i<NB_PIXELS;i++)
slouken@839
   134
	{
slouken@839
   135
		pixels[3*i]=rand()%250-125;
slouken@839
   136
		pixels[3*i+1]=rand()%250-125;
slouken@839
   137
		pixels[3*i+2]=rand()%250-125;
slouken@839
   138
	}
slouken@839
   139
	
slouken@839
   140
	f.glViewport(0,0,640,480);
slouken@839
   141
	
slouken@839
   142
	f.glMatrixMode(GL_PROJECTION);
slouken@839
   143
	f.glLoadIdentity();
slouken@839
   144
	f.glOrtho(-100,100,-100,100,-500,500);
slouken@839
   145
	
slouken@839
   146
	f.glMatrixMode(GL_MODELVIEW);
slouken@839
   147
	f.glLoadIdentity();
slouken@839
   148
	
slouken@839
   149
	f.glEnable(GL_DEPTH_TEST);
slouken@839
   150
	f.glDisable(GL_TEXTURE_2D);
slouken@839
   151
	f.glEnable(GL_BLEND);
slouken@839
   152
	f.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
slouken@839
   153
	
slouken@839
   154
	f.glClearColor(0.0f,0.0f,0.0f,0.0f);
slouken@839
   155
	f.glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
slouken@839
   156
	
slouken@839
   157
	f.glEnable(GL_POINT_SMOOTH);
slouken@839
   158
	f.glHint(GL_POINT_SMOOTH_HINT,GL_NICEST);
slouken@839
   159
	f.glPointSize(5.0f);
slouken@839
   160
	f.glEnable(GL_FOG);
slouken@839
   161
	f.glFogf(GL_FOG_START,-500);
slouken@839
   162
	f.glFogf(GL_FOG_END,500);
slouken@839
   163
	f.glFogf(GL_FOG_DENSITY,0.005);
slouken@839
   164
	
slouken@839
   165
	do
slouken@839
   166
	{
slouken@839
   167
		f.glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
slouken@839
   168
		
slouken@839
   169
		f.glRotatef(2.0,1.0,1.0,1.0);
slouken@839
   170
		f.glRotatef(1.0,0.0,1.0,1.0);
slouken@839
   171
		
slouken@839
   172
		f.glColor4ub(255,255,255,255);
slouken@839
   173
		f.glBegin(GL_POINTS);
slouken@839
   174
		for(i=0;i<NB_PIXELS;i++)
slouken@839
   175
		{
slouken@839
   176
			f.glVertex3f(pixels[3*i],pixels[3*i+1],pixels[3*i+2]);
slouken@839
   177
		}
slouken@839
   178
		f.glEnd();
slouken@839
   179
		SDL_GL_SwapBuffers();
slouken@839
   180
slouken@839
   181
		while(SDL_PollEvent(&event))
slouken@839
   182
		{
slouken@839
   183
			if(event.type & SDL_KEYDOWN)
slouken@839
   184
				done=1;
slouken@839
   185
		}
slouken@839
   186
slouken@839
   187
		SDL_Delay(20);
slouken@839
   188
	}
slouken@839
   189
	while(!done);
slouken@839
   190
	
slouken@839
   191
	SDL_Quit();
slouken@839
   192
	return 0;
slouken@839
   193
}
slouken@839
   194
slouken@839
   195
#else /* HAVE_OPENGL */
slouken@839
   196
slouken@839
   197
int main(int argc, char *argv[])
slouken@839
   198
{
slouken@839
   199
	printf("No OpenGL support on this system\n");
slouken@839
   200
	return 1;
slouken@839
   201
}
slouken@839
   202
slouken@839
   203
#endif /* HAVE_OPENGL */