progs: remove slang subdir
This commit is contained in:
parent
8585c01265
commit
ca10ab6da8
|
@ -1,3 +0,0 @@
|
|||
cltest
|
||||
sotest
|
||||
vstest
|
|
@ -1,57 +0,0 @@
|
|||
# progs/slang/Makefile
|
||||
|
||||
TOP = ../..
|
||||
|
||||
include $(TOP)/configs/current
|
||||
|
||||
INCDIR = $(TOP)/include
|
||||
|
||||
LIB_DEP = $(TOP)/$(LIB_DIR)/$(GL_LIB_NAME)
|
||||
|
||||
LIBS = -L$(TOP)/$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) $(APP_LIB_DEPS)
|
||||
|
||||
#
|
||||
# targets
|
||||
#
|
||||
|
||||
.PHONY: default tests clean
|
||||
|
||||
default: cltest sotest vstest
|
||||
|
||||
tests: default
|
||||
! ./sotest 2> /dev/null | (grep -e ^[*][*][*])
|
||||
! ./vstest 2> /dev/null | (grep -e ^[*][*][*])
|
||||
! ./cltest 2> /dev/null | (grep -e ^[*][*][*])
|
||||
|
||||
clean:
|
||||
-rm -f cltest.o sotest.o vstest.o framework.o cltest sotest vstest
|
||||
|
||||
#
|
||||
# executables
|
||||
#
|
||||
|
||||
cltest: cltest.o framework.o $(LIB_DEP)
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) cltest.o framework.o $(LIBS) -o cltest
|
||||
|
||||
sotest: sotest.o framework.o $(LIB_DEP)
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) sotest.o framework.o $(LIBS) -o sotest
|
||||
|
||||
vstest: vstest.o framework.o $(LIB_DEP)
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) vstest.o framework.o $(LIBS) -o vstest
|
||||
|
||||
#
|
||||
# objects
|
||||
#
|
||||
|
||||
framework.o: framework.c framework.h
|
||||
$(CC) -c -I$(INCDIR) $(CFLAGS) framework.c -o framework.o
|
||||
|
||||
cltest.o: cltest.c framework.h
|
||||
$(CC) -c -I$(INCDIR) $(CFLAGS) cltest.c -o cltest.o
|
||||
|
||||
sotest.o: sotest.c framework.h
|
||||
$(CC) -c -I$(INCDIR) $(CFLAGS) sotest.c -o sotest.o
|
||||
|
||||
vstest.o: vstest.c framework.h
|
||||
$(CC) -c -I$(INCDIR) $(CFLAGS) vstest.c -o vstest.o
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
GLSL regression tests.
|
||||
|
||||
Type "make" to build all test apps.
|
||||
|
||||
Type "make tests" to build and run all test apps. If any
|
||||
error is detected, a line starting with *** is output.
|
||||
|
|
@ -1,253 +0,0 @@
|
|||
/*
|
||||
* GL_ARB_shading_language_100 test application.
|
||||
*
|
||||
* Tests correctness of emited code. Runs multiple well-formed shaders and checks if
|
||||
* they produce valid results.
|
||||
*
|
||||
* Requires specific support on the GL implementation side. A special function printMESA()
|
||||
* must be supported in the language that prints current values of generic type
|
||||
* to the appropriate shader's info log, and optionally to the screen.
|
||||
*
|
||||
* Author: Michal Krol
|
||||
*/
|
||||
|
||||
#include "framework.h"
|
||||
|
||||
#define EPSILON 0.0001f
|
||||
|
||||
static GLhandleARB vert = 0;
|
||||
static GLhandleARB prog = 0;
|
||||
|
||||
static int get_line (FILE *f, char *line, int size)
|
||||
{
|
||||
if (fgets (line, size, f) == NULL)
|
||||
return 0;
|
||||
if (line[strlen (line) - 1] == '\n')
|
||||
line[strlen (line) - 1] = '\0';
|
||||
return 1;
|
||||
}
|
||||
|
||||
struct ATTRIB
|
||||
{
|
||||
char name[32];
|
||||
GLfloat value[64][4];
|
||||
GLuint count;
|
||||
};
|
||||
|
||||
struct ATTRIBS
|
||||
{
|
||||
struct ATTRIB attrib[32];
|
||||
GLuint count;
|
||||
};
|
||||
|
||||
struct SHADER
|
||||
{
|
||||
char code[16000];
|
||||
GLfloat output[1000];
|
||||
GLuint count;
|
||||
};
|
||||
|
||||
enum SHADER_LOAD_STATE
|
||||
{
|
||||
SLS_NONE,
|
||||
SLS_CODE,
|
||||
SLS_OUTPUT
|
||||
};
|
||||
|
||||
struct PROGRAM
|
||||
{
|
||||
struct PROGRAM *next;
|
||||
char name[256];
|
||||
struct ATTRIBS attribs;
|
||||
struct SHADER vertex;
|
||||
};
|
||||
|
||||
enum PROGRAM_LOAD_STATE
|
||||
{
|
||||
PLS_NONE,
|
||||
PLS_ATTRIB,
|
||||
PLS_VERTEX
|
||||
};
|
||||
|
||||
static struct PROGRAM *program = NULL;
|
||||
|
||||
static void load_test_file (const char *filename, struct PROGRAM **program)
|
||||
{
|
||||
struct PROGRAM **currprog = program;
|
||||
FILE *f;
|
||||
char line[256];
|
||||
enum PROGRAM_LOAD_STATE pls = PLS_NONE;
|
||||
enum SHADER_LOAD_STATE sls = SLS_NONE;
|
||||
|
||||
f = fopen (filename, "r");
|
||||
if (f == NULL)
|
||||
return;
|
||||
|
||||
while (get_line (f, line, sizeof (line))) {
|
||||
if (line[0] == '$') {
|
||||
if (strncmp (line + 1, "program", 7) == 0) {
|
||||
if (*currprog != NULL)
|
||||
currprog = &(**currprog).next;
|
||||
*currprog = (struct PROGRAM *) (malloc (sizeof (struct PROGRAM)));
|
||||
if (*currprog == NULL)
|
||||
break;
|
||||
(**currprog).next = NULL;
|
||||
strcpy ((**currprog).name, line + 9);
|
||||
(**currprog).attribs.count = 0;
|
||||
(**currprog).vertex.code[0] = '\0';
|
||||
(**currprog).vertex.count = 0;
|
||||
pls = PLS_NONE;
|
||||
}
|
||||
else if (strncmp (line + 1, "attrib", 6) == 0) {
|
||||
if (*currprog == NULL)
|
||||
break;
|
||||
strcpy ((**currprog).attribs.attrib[(**currprog).attribs.count].name, line + 8);
|
||||
(**currprog).attribs.attrib[(**currprog).attribs.count].count = 0;
|
||||
(**currprog).attribs.count++;
|
||||
pls = PLS_ATTRIB;
|
||||
}
|
||||
else if (strcmp (line + 1, "vertex") == 0) {
|
||||
if (*currprog == NULL)
|
||||
break;
|
||||
pls = PLS_VERTEX;
|
||||
sls = SLS_NONE;
|
||||
}
|
||||
else if (strcmp (line + 1, "code") == 0) {
|
||||
if (*currprog == NULL || pls != PLS_VERTEX)
|
||||
break;
|
||||
sls = SLS_CODE;
|
||||
}
|
||||
else if (strcmp (line + 1, "output") == 0) {
|
||||
if (*currprog == NULL || pls != PLS_VERTEX)
|
||||
break;
|
||||
sls = SLS_OUTPUT;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ((*currprog == NULL || pls == PLS_NONE || sls == SLS_NONE) && line[0] != '\0')
|
||||
break;
|
||||
if (*currprog != NULL && pls == PLS_VERTEX) {
|
||||
if (sls == SLS_CODE) {
|
||||
strcat ((**currprog).vertex.code, line);
|
||||
strcat ((**currprog).vertex.code, "\n");
|
||||
}
|
||||
else if (sls == SLS_OUTPUT && line[0] != '\0') {
|
||||
if (strcmp (line, "true") == 0)
|
||||
(**currprog).vertex.output[(**currprog).vertex.count] = 1.0f;
|
||||
else if (strcmp (line, "false") == 0)
|
||||
(**currprog).vertex.output[(**currprog).vertex.count] = 0.0f;
|
||||
else
|
||||
sscanf (line, "%f", &(**currprog).vertex.output[(**currprog).vertex.count]);
|
||||
(**currprog).vertex.count++;
|
||||
}
|
||||
}
|
||||
else if (*currprog != NULL && pls == PLS_ATTRIB && line[0] != '\0') {
|
||||
struct ATTRIB *att = &(**currprog).attribs.attrib[(**currprog).attribs.count - 1];
|
||||
GLfloat *vec = att->value[att->count];
|
||||
sscanf (line, "%f %f %f %f", &vec[0], &vec[1], &vec[2], &vec[3]);
|
||||
att->count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fclose (f);
|
||||
}
|
||||
|
||||
void InitScene (void)
|
||||
{
|
||||
prog = glCreateProgramObjectARB ();
|
||||
vert = glCreateShaderObjectARB (GL_VERTEX_SHADER_ARB);
|
||||
glAttachObjectARB (prog, vert);
|
||||
glDeleteObjectARB (vert);
|
||||
load_test_file ("cltest.txt", &program);
|
||||
}
|
||||
|
||||
void RenderScene (void)
|
||||
{
|
||||
struct PROGRAM *nextprogram;
|
||||
char *code;
|
||||
GLint info_length, length;
|
||||
char output[65000], *p;
|
||||
GLuint i;
|
||||
|
||||
if (program == NULL)
|
||||
exit (0);
|
||||
|
||||
code = program->vertex.code;
|
||||
glShaderSourceARB (vert, 1, (const GLcharARB **) (&code), NULL);
|
||||
glCompileShaderARB (vert);
|
||||
CheckObjectStatus (vert);
|
||||
|
||||
for (i = 0; i < program->attribs.count; i++) {
|
||||
const char *name = program->attribs.attrib[i].name;
|
||||
if (strcmp (name, "gl_Vertex") != 0)
|
||||
glBindAttribLocationARB (prog, i, name);
|
||||
}
|
||||
|
||||
glLinkProgramARB (prog);
|
||||
CheckObjectStatus (prog);
|
||||
glUseProgramObjectARB (prog);
|
||||
|
||||
printf ("\n--- %s\n", program->name);
|
||||
|
||||
glGetObjectParameterivARB (vert, GL_OBJECT_INFO_LOG_LENGTH_ARB, &info_length);
|
||||
|
||||
glBegin (GL_POINTS);
|
||||
if (program->attribs.count == 0) {
|
||||
glVertex2f (0.0f, 0.0f);
|
||||
}
|
||||
else {
|
||||
for (i = 0; i < program->attribs.attrib[0].count; i++) {
|
||||
GLuint j;
|
||||
for (j = 0; j < program->attribs.count; j++) {
|
||||
GLuint n = (j + 1) % program->attribs.count;
|
||||
GLfloat *vec = program->attribs.attrib[n].value[i];
|
||||
const char *name = program->attribs.attrib[n].name;
|
||||
if (strcmp (name, "gl_Vertex") == 0)
|
||||
glVertex4fv (vec);
|
||||
else
|
||||
glVertexAttrib4fvARB (n, vec);
|
||||
}
|
||||
}
|
||||
}
|
||||
glEnd ();
|
||||
glFlush ();
|
||||
|
||||
glGetInfoLogARB (vert, sizeof (output), &length, output);
|
||||
p = output + info_length - 1;
|
||||
for (i = 0; i < program->vertex.count; i++) {
|
||||
GLfloat value;
|
||||
if (p == NULL) {
|
||||
printf ("*** %s\n", "I/O error");
|
||||
break;
|
||||
}
|
||||
if (strncmp (p, "true", 4) == 0)
|
||||
value = 1.0f;
|
||||
else if (strncmp (p, "false", 5) == 0)
|
||||
value = 0.0f;
|
||||
else if (sscanf (p, "%f", &value) != 1) {
|
||||
printf ("*** %s\n", "I/O error");
|
||||
break;
|
||||
}
|
||||
if (fabs (value - program->vertex.output[i]) > EPSILON) {
|
||||
printf ("*** Values are different, is %f, should be %f\n", value,
|
||||
program->vertex.output[i]);
|
||||
}
|
||||
p = strchr (p, '\n');
|
||||
if (p != NULL)
|
||||
p++;
|
||||
}
|
||||
if (p && *p != '\0')
|
||||
printf ("*** %s\n", "I/O error");
|
||||
|
||||
nextprogram = program->next;
|
||||
free (program);
|
||||
program = nextprogram;
|
||||
}
|
||||
|
||||
int main (int argc, char *argv[])
|
||||
{
|
||||
InitFramework (&argc, argv);
|
||||
return 0;
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -1,145 +0,0 @@
|
|||
#include "framework.h"
|
||||
|
||||
/*
|
||||
* GL_ARB_multitexture
|
||||
*/
|
||||
#ifndef GL_ARB_multitexture
|
||||
PFNGLCLIENTACTIVETEXTUREARBPROC glClientActiveTextureARB;
|
||||
PFNGLMULTITEXCOORD4FVARBPROC glMultiTexCoord4fvARB;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* GL_ARB_shader_objects
|
||||
*/
|
||||
PFNGLDELETEOBJECTARBPROC glDeleteObjectARB;
|
||||
PFNGLGETHANDLEARBPROC glGetHandleARB;
|
||||
PFNGLDETACHOBJECTARBPROC glDetachObjectARB;
|
||||
PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB;
|
||||
PFNGLSHADERSOURCEARBPROC glShaderSourceARB;
|
||||
PFNGLCOMPILESHADERARBPROC glCompileShaderARB;
|
||||
PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB;
|
||||
PFNGLATTACHOBJECTARBPROC glAttachObjectARB;
|
||||
PFNGLLINKPROGRAMARBPROC glLinkProgramARB;
|
||||
PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB;
|
||||
PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB;
|
||||
PFNGLGETINFOLOGARBPROC glGetInfoLogARB;
|
||||
PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB;
|
||||
|
||||
/*
|
||||
* GL_ARB_vertex_shader
|
||||
*/
|
||||
PFNGLVERTEXATTRIB4FVARBPROC glVertexAttrib4fvARB;
|
||||
PFNGLVERTEXATTRIBPOINTERARBPROC glVertexAttribPointerARB;
|
||||
PFNGLENABLEVERTEXATTRIBARRAYARBPROC glEnableVertexAttribArrayARB;
|
||||
PFNGLDISABLEVERTEXATTRIBARRAYARBPROC glDisableVertexAttribArrayARB;
|
||||
PFNGLBINDATTRIBLOCATIONARBPROC glBindAttribLocationARB;
|
||||
PFNGLGETATTRIBLOCATIONARBPROC glGetAttribLocationARB;
|
||||
|
||||
/*
|
||||
* GL_EXT_fog_coord
|
||||
*/
|
||||
PFNGLFOGCOORDFVEXTPROC glFogCoordfvEXT;
|
||||
PFNGLFOGCOORDPOINTEREXTPROC glFogCoordPointerEXT;
|
||||
|
||||
/*
|
||||
* GL_EXT_secondary_color
|
||||
*/
|
||||
PFNGLSECONDARYCOLOR3FVEXTPROC glSecondaryColor3fvEXT;
|
||||
PFNGLSECONDARYCOLORPOINTEREXTPROC glSecondaryColorPointerEXT;
|
||||
|
||||
static void Display (void)
|
||||
{
|
||||
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
RenderScene ();
|
||||
glutSwapBuffers ();
|
||||
}
|
||||
|
||||
static void Idle (void)
|
||||
{
|
||||
glutPostRedisplay ();
|
||||
}
|
||||
|
||||
void InitFramework (int *argc, char *argv[])
|
||||
{
|
||||
glutInit (argc, argv);
|
||||
glutInitWindowPosition (0, 0);
|
||||
glutInitWindowSize (200, 200);
|
||||
glutInitDisplayMode (GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
|
||||
glutCreateWindow (argv[0]);
|
||||
|
||||
#ifndef GL_ARB_multitexture
|
||||
GETPROCADDR(glClientActiveTextureARB, PFNGLCLIENTACTIVETEXTUREARBPROC);
|
||||
GETPROCADDR(glMultiTexCoord4fvARB, PFNGLMULTITEXCOORD4FVARBPROC);
|
||||
#endif
|
||||
|
||||
GETPROCADDR(glDeleteObjectARB, PFNGLDELETEOBJECTARBPROC);
|
||||
GETPROCADDR(glGetHandleARB, PFNGLGETHANDLEARBPROC);
|
||||
GETPROCADDR(glDetachObjectARB, PFNGLDETACHOBJECTARBPROC);
|
||||
GETPROCADDR(glCreateShaderObjectARB, PFNGLCREATESHADEROBJECTARBPROC);
|
||||
GETPROCADDR(glShaderSourceARB, PFNGLSHADERSOURCEARBPROC);
|
||||
GETPROCADDR(glCompileShaderARB, PFNGLCOMPILESHADERARBPROC);
|
||||
GETPROCADDR(glCreateProgramObjectARB, PFNGLCREATEPROGRAMOBJECTARBPROC);
|
||||
GETPROCADDR(glAttachObjectARB, PFNGLATTACHOBJECTARBPROC);
|
||||
GETPROCADDR(glLinkProgramARB, PFNGLLINKPROGRAMARBPROC);
|
||||
GETPROCADDR(glUseProgramObjectARB, PFNGLUSEPROGRAMOBJECTARBPROC);
|
||||
GETPROCADDR(glGetObjectParameterivARB, PFNGLGETOBJECTPARAMETERIVARBPROC);
|
||||
GETPROCADDR(glGetInfoLogARB, PFNGLGETINFOLOGARBPROC);
|
||||
GETPROCADDR(glGetUniformLocationARB, PFNGLGETUNIFORMLOCATIONARBPROC);
|
||||
|
||||
GETPROCADDR(glVertexAttrib4fvARB, PFNGLVERTEXATTRIB4FVARBPROC);
|
||||
GETPROCADDR(glVertexAttribPointerARB, PFNGLVERTEXATTRIBPOINTERARBPROC);
|
||||
GETPROCADDR(glEnableVertexAttribArrayARB, PFNGLENABLEVERTEXATTRIBARRAYARBPROC);
|
||||
GETPROCADDR(glDisableVertexAttribArrayARB, PFNGLDISABLEVERTEXATTRIBARRAYARBPROC);
|
||||
GETPROCADDR(glBindAttribLocationARB, PFNGLBINDATTRIBLOCATIONARBPROC);
|
||||
GETPROCADDR(glGetAttribLocationARB, PFNGLGETATTRIBLOCATIONARBPROC);
|
||||
|
||||
GETPROCADDR(glFogCoordfvEXT, PFNGLFOGCOORDFVEXTPROC);
|
||||
GETPROCADDR(glFogCoordPointerEXT, PFNGLFOGCOORDPOINTEREXTPROC);
|
||||
|
||||
GETPROCADDR(glSecondaryColor3fvEXT, PFNGLSECONDARYCOLOR3FVEXTPROC);
|
||||
GETPROCADDR(glSecondaryColorPointerEXT, PFNGLSECONDARYCOLORPOINTEREXTPROC);
|
||||
|
||||
printf ("VENDOR: %s\n", glGetString (GL_VENDOR));
|
||||
printf ("RENDERER: %s\n", glGetString (GL_RENDERER));
|
||||
|
||||
InitScene ();
|
||||
|
||||
glutDisplayFunc (Display);
|
||||
glutIdleFunc (Idle);
|
||||
glutMainLoop ();
|
||||
}
|
||||
|
||||
GLboolean CheckObjectStatus (GLhandleARB handle)
|
||||
{
|
||||
GLint type, status, length;
|
||||
GLcharARB *infolog;
|
||||
|
||||
glGetObjectParameterivARB (handle, GL_OBJECT_TYPE_ARB, &type);
|
||||
if (type == GL_SHADER_OBJECT_ARB)
|
||||
glGetObjectParameterivARB (handle, GL_OBJECT_COMPILE_STATUS_ARB, &status);
|
||||
else if (type == GL_PROGRAM_OBJECT_ARB)
|
||||
glGetObjectParameterivARB (handle, GL_OBJECT_LINK_STATUS_ARB, &status);
|
||||
else {
|
||||
assert (0);
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
if (status)
|
||||
return GL_TRUE;
|
||||
|
||||
printf ("\n%s FAILED. INFO LOG FOLLOWS:\n",
|
||||
type == GL_SHADER_OBJECT_ARB ? "SHADER COMPILE" : "PROGRAM LINK");
|
||||
|
||||
glGetObjectParameterivARB (handle, GL_OBJECT_INFO_LOG_LENGTH_ARB, &length);
|
||||
infolog = (GLcharARB *) (malloc (length));
|
||||
if (infolog != NULL) {
|
||||
glGetInfoLogARB (handle, length, NULL, infolog);
|
||||
printf ("%s", infolog);
|
||||
free (infolog);
|
||||
}
|
||||
|
||||
printf ("\n");
|
||||
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
|
@ -1,82 +0,0 @@
|
|||
#ifndef _FRAMEWORK_H_
|
||||
#define _FRAMEWORK_H_
|
||||
|
||||
#ifdef WIN32
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
#include <math.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glut.h>
|
||||
#include <GL/glext.h>
|
||||
|
||||
#ifdef WIN32
|
||||
#define GETPROCADDRESS(x) wglGetProcAddress (x)
|
||||
#else
|
||||
#define GETPROCADDRESS(x) glutGetProcAddress (x)
|
||||
#endif
|
||||
|
||||
#define GETPROCADDR(x,T) do { x = (T) (GETPROCADDRESS(#x)); assert (x != NULL); } while (0)
|
||||
|
||||
/*
|
||||
* GL_ARB_multitexture
|
||||
*/
|
||||
#ifndef GL_ARB_multitexture
|
||||
extern PFNGLCLIENTACTIVETEXTUREARBPROC glClientActiveTextureARB;
|
||||
extern PFNGLMULTITEXCOORD4FVARBPROC glMultiTexCoord4fvARB;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* GL_ARB_shader_objects
|
||||
*/
|
||||
extern PFNGLDELETEOBJECTARBPROC glDeleteObjectARB;
|
||||
extern PFNGLGETHANDLEARBPROC glGetHandleARB;
|
||||
extern PFNGLDETACHOBJECTARBPROC glDetachObjectARB;
|
||||
extern PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB;
|
||||
extern PFNGLSHADERSOURCEARBPROC glShaderSourceARB;
|
||||
extern PFNGLCOMPILESHADERARBPROC glCompileShaderARB;
|
||||
extern PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB;
|
||||
extern PFNGLATTACHOBJECTARBPROC glAttachObjectARB;
|
||||
extern PFNGLLINKPROGRAMARBPROC glLinkProgramARB;
|
||||
extern PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB;
|
||||
extern PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB;
|
||||
extern PFNGLGETINFOLOGARBPROC glGetInfoLogARB;
|
||||
extern PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB;
|
||||
/*static PFNGLUNIFORM4FVARBPROC glUniform4fvARB = NULL;*/
|
||||
|
||||
/*
|
||||
* GL_ARB_vertex_shader
|
||||
*/
|
||||
extern PFNGLVERTEXATTRIB4FVARBPROC glVertexAttrib4fvARB;
|
||||
extern PFNGLVERTEXATTRIBPOINTERARBPROC glVertexAttribPointerARB;
|
||||
extern PFNGLENABLEVERTEXATTRIBARRAYARBPROC glEnableVertexAttribArrayARB;
|
||||
extern PFNGLDISABLEVERTEXATTRIBARRAYARBPROC glDisableVertexAttribArrayARB;
|
||||
extern PFNGLBINDATTRIBLOCATIONARBPROC glBindAttribLocationARB;
|
||||
extern PFNGLGETATTRIBLOCATIONARBPROC glGetAttribLocationARB;
|
||||
|
||||
/*
|
||||
* GL_EXT_fog_coord
|
||||
*/
|
||||
extern PFNGLFOGCOORDFVEXTPROC glFogCoordfvEXT;
|
||||
extern PFNGLFOGCOORDPOINTEREXTPROC glFogCoordPointerEXT;
|
||||
|
||||
/*
|
||||
* GL_EXT_secondary_color
|
||||
*/
|
||||
extern PFNGLSECONDARYCOLOR3FVEXTPROC glSecondaryColor3fvEXT;
|
||||
extern PFNGLSECONDARYCOLORPOINTEREXTPROC glSecondaryColorPointerEXT;
|
||||
|
||||
extern void InitFramework (int *argc, char *argv[]);
|
||||
|
||||
extern void InitScene (void);
|
||||
extern void RenderScene (void);
|
||||
|
||||
extern GLboolean CheckObjectStatus (GLhandleARB);
|
||||
|
||||
#endif
|
||||
|
|
@ -1,439 +0,0 @@
|
|||
/*
|
||||
* GL_ARB_shader_objects & GL_ARB_vertex_shader interface test application.
|
||||
* Neither compiler nor executor is being tested here, although some simple shader
|
||||
* compilation tests are performed.
|
||||
*
|
||||
* Perfectly valid behaviour produces output that does not have a line
|
||||
* beginning with three stars (***).
|
||||
*
|
||||
* Author: Michal Krol
|
||||
*/
|
||||
|
||||
#include "framework.h"
|
||||
|
||||
enum TEST_TYPE
|
||||
{
|
||||
TT_GETERROR_NOERROR,
|
||||
TT_GETERROR_INVALIDVALUE,
|
||||
TT_GETERROR_INVALIDOPERATION,
|
||||
TT_PARAM1_ZERO,
|
||||
TT_PARAM1_NONZERO
|
||||
};
|
||||
|
||||
static enum TEST_TYPE current_test;
|
||||
|
||||
static void begintest (enum TEST_TYPE type, const char *name)
|
||||
{
|
||||
current_test = type;
|
||||
printf ("\n BEGIN TEST: %s\n", name);
|
||||
while (glGetError () != GL_NO_ERROR)
|
||||
;
|
||||
}
|
||||
|
||||
static void endtest1 (GLuint param1)
|
||||
{
|
||||
const char *msg = NULL;
|
||||
|
||||
switch (current_test)
|
||||
{
|
||||
case TT_GETERROR_NOERROR:
|
||||
if (glGetError () != GL_NO_ERROR)
|
||||
msg = "glGetError () does not return GL_NO_ERROR";
|
||||
break;
|
||||
case TT_GETERROR_INVALIDVALUE:
|
||||
if (glGetError () != GL_INVALID_VALUE)
|
||||
msg = "glGetError () does not return GL_INVALID_VALUE";
|
||||
break;
|
||||
case TT_GETERROR_INVALIDOPERATION:
|
||||
if (glGetError () != GL_INVALID_OPERATION)
|
||||
msg = "glGetError () does not return GL_INVALID_OPERATION";
|
||||
break;
|
||||
case TT_PARAM1_ZERO:
|
||||
if (param1)
|
||||
msg = "The parameter is not zero";
|
||||
break;
|
||||
case TT_PARAM1_NONZERO:
|
||||
if (!param1)
|
||||
msg = "The parameter is not non-zero";
|
||||
break;
|
||||
default:
|
||||
assert (0);
|
||||
}
|
||||
|
||||
if (msg == NULL)
|
||||
printf (" OK\n");
|
||||
else
|
||||
printf ("*** %s\n", msg);
|
||||
|
||||
while (glGetError () != GL_NO_ERROR)
|
||||
;
|
||||
}
|
||||
|
||||
static void endtest ()
|
||||
{
|
||||
endtest1 (0);
|
||||
}
|
||||
|
||||
static GLhandleARB vert = 0;
|
||||
static GLhandleARB frag = 0;
|
||||
static GLhandleARB prog = 0;
|
||||
|
||||
static GLhandleARB find_invalid_handle ()
|
||||
{
|
||||
GLhandleARB handle;
|
||||
|
||||
for (handle = 1; handle < 16; handle++)
|
||||
if (handle != vert && handle != frag && handle != prog)
|
||||
return handle;
|
||||
assert (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const char *invsynvertsrc =
|
||||
"void main () {\n"
|
||||
" gl_Position = gl_ModelViewMatrix ! gl_Vertex;\n" /* unexpected token */
|
||||
"}\n"
|
||||
;
|
||||
|
||||
static const char *invsemvertsrc =
|
||||
"void main () {\n"
|
||||
" gl_Position = gl_ModelviewMatrix * gl_Vertex;\n" /* undeclared identifier */
|
||||
"}\n"
|
||||
;
|
||||
|
||||
static const char *uniforms =
|
||||
"uniform vec4 CommonUniform;\n"
|
||||
;
|
||||
|
||||
static const char *validvertsrc =
|
||||
"uniform vec4 VertexUniform;\n"
|
||||
"attribute vec4 FirstAttrib;\n"
|
||||
"attribute vec4 SecondAttrib;\n"
|
||||
"void main () {\n"
|
||||
" gl_Position = gl_ModelViewMatrix * gl_Vertex + CommonUniform + VertexUniform\n"
|
||||
" + FirstAttrib + SecondAttrib;\n"
|
||||
"}\n"
|
||||
;
|
||||
|
||||
static const char *invsynfragsrc =
|
||||
"void main () {\n"
|
||||
" gl_FragColor = gl_Color\n" /* missing ; */
|
||||
"}\n"
|
||||
;
|
||||
|
||||
static const char *invsemfragsrc =
|
||||
"void main () {\n"
|
||||
" gl_FragColor = gl_FrontColor;\n" /* gl_FrontColor only in vertex shader */
|
||||
"}\n"
|
||||
;
|
||||
|
||||
static const char *validfragsrc =
|
||||
"uniform vec4 FragmentUniform;\n"
|
||||
"void main () {\n"
|
||||
" gl_FragColor = gl_Color + CommonUniform + FragmentUniform;\n"
|
||||
"}\n"
|
||||
;
|
||||
|
||||
void InitScene (void)
|
||||
{
|
||||
GLint params[1];
|
||||
const char *tab[2];
|
||||
|
||||
/*
|
||||
* GL should silently ignore calls that delete object 0.
|
||||
*/
|
||||
begintest (TT_GETERROR_NOERROR, "glDeleteObject(0)");
|
||||
glDeleteObjectARB (0);
|
||||
endtest ();
|
||||
|
||||
/*
|
||||
* GL generates an error on invalid object handle.
|
||||
*/
|
||||
begintest (TT_GETERROR_INVALIDVALUE, "Pass invalid non-zero object handle");
|
||||
glDeleteObjectARB (find_invalid_handle ());
|
||||
endtest ();
|
||||
glUseProgramObjectARB (find_invalid_handle ());
|
||||
endtest ();
|
||||
|
||||
/*
|
||||
* Create object. GL should return unique non-zero values.
|
||||
*/
|
||||
begintest (TT_PARAM1_NONZERO, "Create object");
|
||||
vert = glCreateShaderObjectARB (GL_VERTEX_SHADER_ARB);
|
||||
endtest1 (vert);
|
||||
frag = glCreateShaderObjectARB (GL_FRAGMENT_SHADER_ARB);
|
||||
endtest1 (frag);
|
||||
prog = glCreateProgramObjectARB ();
|
||||
endtest1 (prog);
|
||||
endtest1 (vert != frag && frag != prog && prog != vert);
|
||||
|
||||
/*
|
||||
* Link empty program.
|
||||
*/
|
||||
begintest (TT_PARAM1_NONZERO, "Link empty program");
|
||||
glLinkProgramARB (prog);
|
||||
endtest1 (CheckObjectStatus (prog));
|
||||
|
||||
/*
|
||||
* Use empty program object. Empty program objects are valid.
|
||||
*/
|
||||
begintest (TT_GETERROR_NOERROR, "Use empty program object");
|
||||
glUseProgramObjectARB (prog);
|
||||
endtest ();
|
||||
|
||||
/*
|
||||
* Attach invalid object handles. Program object 0 should not be accepted.
|
||||
*/
|
||||
begintest (TT_GETERROR_INVALIDVALUE, "Attach invalid object handle");
|
||||
glAttachObjectARB (0, find_invalid_handle ());
|
||||
endtest ();
|
||||
glAttachObjectARB (0, frag);
|
||||
endtest ();
|
||||
glAttachObjectARB (find_invalid_handle (), find_invalid_handle ());
|
||||
endtest ();
|
||||
glAttachObjectARB (find_invalid_handle (), frag);
|
||||
endtest ();
|
||||
glAttachObjectARB (prog, find_invalid_handle ());
|
||||
endtest ();
|
||||
|
||||
/*
|
||||
* Attach valid object handles with wrong semantics.
|
||||
*/
|
||||
begintest (TT_GETERROR_INVALIDOPERATION, "Attach object badly");
|
||||
glAttachObjectARB (vert, frag);
|
||||
endtest ();
|
||||
glAttachObjectARB (vert, prog);
|
||||
endtest ();
|
||||
glAttachObjectARB (prog, prog);
|
||||
endtest ();
|
||||
|
||||
/*
|
||||
* Detach non-attached object.
|
||||
*/
|
||||
begintest (TT_GETERROR_INVALIDOPERATION, "Detach non-attached object");
|
||||
glDetachObjectARB (prog, vert);
|
||||
endtest ();
|
||||
glDetachObjectARB (prog, frag);
|
||||
endtest ();
|
||||
|
||||
/*
|
||||
* Attach shader.
|
||||
*/
|
||||
begintest (TT_GETERROR_NOERROR, "Attach shader to program object");
|
||||
glAttachObjectARB (prog, vert);
|
||||
endtest ();
|
||||
glAttachObjectARB (prog, frag);
|
||||
endtest ();
|
||||
|
||||
/*
|
||||
* Attach object twice.
|
||||
*/
|
||||
begintest (TT_GETERROR_INVALIDOPERATION, "Attach object twice");
|
||||
glAttachObjectARB (prog, vert);
|
||||
endtest ();
|
||||
glAttachObjectARB (prog, frag);
|
||||
endtest ();
|
||||
|
||||
/*
|
||||
* Detach attached object.
|
||||
*/
|
||||
begintest (TT_GETERROR_NOERROR, "Detach attached object");
|
||||
glDetachObjectARB (prog, vert);
|
||||
endtest ();
|
||||
glDetachObjectARB (prog, frag);
|
||||
endtest ();
|
||||
|
||||
/*
|
||||
* Attach shader again.
|
||||
*/
|
||||
begintest (TT_GETERROR_NOERROR, "Attach shader again");
|
||||
glAttachObjectARB (prog, vert);
|
||||
endtest ();
|
||||
glAttachObjectARB (prog, frag);
|
||||
endtest ();
|
||||
|
||||
/*
|
||||
* Delete attached object.
|
||||
*/
|
||||
begintest (TT_GETERROR_NOERROR, "Delete attached object");
|
||||
glDeleteObjectARB (vert);
|
||||
endtest ();
|
||||
glDeleteObjectARB (frag);
|
||||
endtest ();
|
||||
|
||||
/*
|
||||
* Query delete status. It should return TRUE. Object handles are still valid
|
||||
* as they are referenced by program object container.
|
||||
*/
|
||||
begintest (TT_PARAM1_NONZERO, "Query delete status");
|
||||
glGetObjectParameterivARB (vert, GL_OBJECT_DELETE_STATUS_ARB, params);
|
||||
endtest1 (params[0]);
|
||||
glGetObjectParameterivARB (frag, GL_OBJECT_DELETE_STATUS_ARB, params);
|
||||
endtest1 (params[0]);
|
||||
|
||||
/*
|
||||
* Delete already deleted attached object. The behaviour is undefined, but we
|
||||
* check for no errors. The object still exists, so the handle value is okay.
|
||||
* In other words, these calls should be silently ignored by GL.
|
||||
*/
|
||||
begintest (TT_GETERROR_NOERROR, "Delete already deleted attached object");
|
||||
glDeleteObjectARB (vert);
|
||||
endtest ();
|
||||
glDeleteObjectARB (frag);
|
||||
endtest ();
|
||||
|
||||
/*
|
||||
* Compile shader source with syntax error.
|
||||
*/
|
||||
begintest (TT_PARAM1_ZERO, "Compile shader source with syntax error");
|
||||
glShaderSourceARB (vert, 1, &invsynvertsrc, NULL);
|
||||
glCompileShaderARB (vert);
|
||||
endtest1 (CheckObjectStatus (vert));
|
||||
glShaderSourceARB (frag, 1, &invsynfragsrc, NULL);
|
||||
glCompileShaderARB (frag);
|
||||
endtest1 (CheckObjectStatus (frag));
|
||||
|
||||
/*
|
||||
* Compile shader source with semantic error.
|
||||
*/
|
||||
begintest (TT_PARAM1_ZERO, "Compile shader source with semantic error");
|
||||
glShaderSourceARB (vert, 1, &invsemvertsrc, NULL);
|
||||
glCompileShaderARB (vert);
|
||||
endtest1 (CheckObjectStatus (vert));
|
||||
glShaderSourceARB (frag, 1, &invsemfragsrc, NULL);
|
||||
glCompileShaderARB (frag);
|
||||
endtest1 (CheckObjectStatus (frag));
|
||||
|
||||
/*
|
||||
* Link ill-formed vertex-fragment program.
|
||||
*/
|
||||
begintest (TT_PARAM1_ZERO, "Link ill-formed vertex-fragment program");
|
||||
glLinkProgramARB (prog);
|
||||
endtest1 (CheckObjectStatus (prog));
|
||||
|
||||
/*
|
||||
* Use badly linked program object.
|
||||
*/
|
||||
begintest (TT_GETERROR_INVALIDOPERATION, "Use badly linked program object");
|
||||
glUseProgramObjectARB (prog);
|
||||
endtest ();
|
||||
|
||||
/*
|
||||
* Compile well-formed shader source. Check if multi-string sources can be handled.
|
||||
*/
|
||||
begintest (TT_PARAM1_NONZERO, "Compile well-formed shader source");
|
||||
tab[0] = uniforms;
|
||||
tab[1] = validvertsrc;
|
||||
glShaderSourceARB (vert, 2, tab, NULL);
|
||||
glCompileShaderARB (vert);
|
||||
endtest1 (CheckObjectStatus (vert));
|
||||
tab[0] = uniforms;
|
||||
tab[1] = validfragsrc;
|
||||
glShaderSourceARB (frag, 2, tab, NULL);
|
||||
glCompileShaderARB (frag);
|
||||
endtest1 (CheckObjectStatus (frag));
|
||||
|
||||
/*
|
||||
* Link vertex-fragment program.
|
||||
*/
|
||||
begintest (TT_PARAM1_NONZERO, "Link vertex-fragment program");
|
||||
glLinkProgramARB (prog);
|
||||
endtest1 (CheckObjectStatus (prog));
|
||||
|
||||
/*
|
||||
* Use valid linked program object.
|
||||
*/
|
||||
begintest (TT_GETERROR_NOERROR, "Use linked program object");
|
||||
glUseProgramObjectARB (prog);
|
||||
endtest ();
|
||||
|
||||
/*
|
||||
* Get current program.
|
||||
*/
|
||||
begintest (TT_PARAM1_NONZERO, "Get current program");
|
||||
endtest1 (glGetHandleARB (GL_PROGRAM_OBJECT_ARB) == prog);
|
||||
|
||||
/*
|
||||
* Use 0 program object.
|
||||
*/
|
||||
begintest (TT_GETERROR_NOERROR, "Use 0 program object");
|
||||
glUseProgramObjectARB (0);
|
||||
endtest ();
|
||||
|
||||
/*
|
||||
* Query uniform location. Uniforms with gl_ prefix cannot be queried.
|
||||
*/
|
||||
begintest (TT_PARAM1_NONZERO, "Query uniform location");
|
||||
endtest1 (glGetUniformLocationARB (prog, "gl_ModelViewMatrix") == -1);
|
||||
endtest1 (glGetUniformLocationARB (prog, "UniformThatDoesNotExist") == -1);
|
||||
endtest1 (glGetUniformLocationARB (prog, "") == -1);
|
||||
endtest1 (glGetUniformLocationARB (prog, "CommonUniform") != -1);
|
||||
endtest1 (glGetUniformLocationARB (prog, "VertexUniform") != -1);
|
||||
endtest1 (glGetUniformLocationARB (prog, "FragmentUniform") != -1);
|
||||
|
||||
/*
|
||||
* Query attrib location. Attribs with gl_ prefix cannot be queried.
|
||||
* When gl_Vertex is used, none of the generic attribs can have index 0.
|
||||
*/
|
||||
begintest (TT_PARAM1_NONZERO, "Query attrib location");
|
||||
endtest1 (glGetAttribLocationARB (prog, "gl_Vertex") == -1);
|
||||
endtest1 (glGetAttribLocationARB (prog, "AttribThatDoesNotExist") == -1);
|
||||
endtest1 (glGetAttribLocationARB (prog, "") == -1);
|
||||
endtest1 (glGetAttribLocationARB (prog, "FirstAttrib") > 0);
|
||||
endtest1 (glGetAttribLocationARB (prog, "SecondAttrib") > 0);
|
||||
|
||||
/*
|
||||
* Bind attrib locations, link and check if locations are correct.
|
||||
*/
|
||||
begintest (TT_PARAM1_NONZERO, "Bind attrib location #1");
|
||||
glBindAttribLocationARB (prog, 1, "FirstAttrib");
|
||||
glBindAttribLocationARB (prog, 2, "SecondAttrib");
|
||||
glLinkProgramARB (prog);
|
||||
endtest1 (CheckObjectStatus (prog));
|
||||
endtest1 (glGetAttribLocationARB (prog, "FirstAttrib") == 1);
|
||||
endtest1 (glGetAttribLocationARB (prog, "SecondAttrib") == 2);
|
||||
|
||||
/*
|
||||
* Bind attrib locations in different order. Link and check if locations are correct.
|
||||
*/
|
||||
begintest (TT_PARAM1_NONZERO, "Bind attrib location #2");
|
||||
glBindAttribLocationARB (prog, 1, "SecondAttrib");
|
||||
glBindAttribLocationARB (prog, 2, "FirstAttrib");
|
||||
glLinkProgramARB (prog);
|
||||
endtest1 (CheckObjectStatus (prog));
|
||||
endtest1 (glGetAttribLocationARB (prog, "SecondAttrib") == 1);
|
||||
endtest1 (glGetAttribLocationARB (prog, "FirstAttrib") == 2);
|
||||
|
||||
/*
|
||||
* Detach deleted object.
|
||||
*/
|
||||
begintest (TT_GETERROR_NOERROR, "Detach deleted object");
|
||||
glDetachObjectARB (prog, vert);
|
||||
endtest ();
|
||||
glDetachObjectARB (prog, frag);
|
||||
endtest ();
|
||||
|
||||
/*
|
||||
* Delete deleted detached object.
|
||||
*/
|
||||
begintest (TT_GETERROR_INVALIDVALUE, "Delete deleted detached object");
|
||||
glDeleteObjectARB (vert);
|
||||
endtest ();
|
||||
glDeleteObjectARB (frag);
|
||||
endtest ();
|
||||
|
||||
exit (0);
|
||||
}
|
||||
|
||||
void RenderScene (void)
|
||||
{
|
||||
/* never reached */
|
||||
assert (0);
|
||||
}
|
||||
|
||||
int main (int argc, char *argv[])
|
||||
{
|
||||
InitFramework (&argc, argv);
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -1,346 +0,0 @@
|
|||
/*
|
||||
* GL_ARB_vertex_shader test application. Feeds a vertex shader with attributes that
|
||||
* that have magic values and check if the values received by the shader are the same.
|
||||
*
|
||||
* Requires specific support on the GL implementation side. A special function printMESA()
|
||||
* must be supported in the language that prints variable's current value of generic type
|
||||
* to the appropriate shader's info log, and optionally to the screen.
|
||||
*
|
||||
* Perfectly valid behaviour produces output that does not have a line
|
||||
* beginning with three stars (***).
|
||||
*
|
||||
* Author: Michal Krol
|
||||
*/
|
||||
|
||||
#include "framework.h"
|
||||
|
||||
#define EPSILON 0.0001f
|
||||
|
||||
static GLhandleARB vert = 0;
|
||||
static GLhandleARB prog = 0;
|
||||
|
||||
enum SUBMIT_MODE
|
||||
{
|
||||
SM_IM,
|
||||
SM_VA,
|
||||
SM_IM_DL,
|
||||
SM_VA_DL,
|
||||
SM_MAX
|
||||
};
|
||||
|
||||
static enum SUBMIT_MODE submit_method = SM_IM;
|
||||
|
||||
#define C 0
|
||||
#define S 1
|
||||
#define N 2
|
||||
#define V 3
|
||||
#define T 4
|
||||
#define F 5
|
||||
#define A 6
|
||||
|
||||
struct ATTRIB_DATA
|
||||
{
|
||||
const char *name;
|
||||
GLuint dispatch;
|
||||
GLint index;
|
||||
GLint bind;
|
||||
GLuint size;
|
||||
GLfloat data[4];
|
||||
};
|
||||
|
||||
static struct ATTRIB_DATA attribs[] = {
|
||||
{ "gl_Color", C, -1, -1, 4, { 4.2f, 0.56f, -2.1f, 0.29f } },
|
||||
{ "gl_SecondaryColor", S, -1, -1, 4, { 0.38f, 2.0f, 0.99f, 1.0f } },
|
||||
{ "gl_Normal", N, -1, -1, 3, { 54.0f, 77.0f, 1.15f, 0.0f } },
|
||||
{ "gl_MultiTexCoord0", T, 0, -1, 4, { 11.1f, 11.2f, 11.3f, 11.4f } },
|
||||
{ "gl_MultiTexCoord1", T, 1, -1, 4, { 22.1f, 22.2f, 22.3f, 22.4f } },
|
||||
{ "gl_MultiTexCoord2", T, 2, -1, 4, { 33.1f, 33.2f, 33.3f, 33.4f } },
|
||||
{ "gl_MultiTexCoord3", T, 3, -1, 4, { 44.1f, 44.2f, 44.3f, 44.4f } },
|
||||
{ "gl_MultiTexCoord4", T, 4, -1, 4, { 55.1f, 55.2f, 55.3f, 55.4f } },
|
||||
{ "gl_MultiTexCoord5", T, 5, -1, 4, { 66.1f, 66.2f, 66.3f, 66.4f } },
|
||||
{ "gl_MultiTexCoord6", T, 6, -1, 4, { 77.1f, 77.2f, 77.3f, 77.4f } },
|
||||
{ "gl_MultiTexCoord7", T, 7, -1, 4, { 88.1f, 88.2f, 88.3f, 88.4f } },
|
||||
{ "gl_FogCoord", F, -1, -1, 1, { 0.63f, 0.0f, 0.0f, 0.0f } },
|
||||
{ "Attribute1", A, 1, 1, 4, { 1.11f, 1.22f, 1.33f, 1.44f } },
|
||||
{ "Attribute2", A, 2, 2, 4, { 2.11f, 2.22f, 2.33f, 2.44f } },
|
||||
{ "Attribute3", A, 3, 3, 4, { 3.11f, 3.22f, 3.33f, 3.44f } },
|
||||
{ "Attribute4", A, 4, 4, 1, { 4.11f, 0.0f, 0.0f, 0.0f } },
|
||||
{ "Attribute5", A, 5, 5, 2, { 5.11f, 5.22f, 0.0f, 0.0f } },
|
||||
{ "Attribute6", A, 6, 6, 3, { 6.11f, 6.22f, 6.33f, 0.0f } },
|
||||
{ "Attribute7", A, 7, 7, 2, { 7.11f, 7.22f, 0.0f, 0.0f } },
|
||||
{ "Attribute7", A, 8, -1, 2, { 8.11f, 8.22f, 0.0f, 0.0f } },
|
||||
{ "Attribute9", A, 9, 9, 3, { 9.11f, 9.22f, 9.33f, 0.0f } },
|
||||
{ "Attribute9", A, 10, -1, 3, { 10.11f, 10.22f, 10.33f, 0.0f } },
|
||||
{ "Attribute9", A, 11, -1, 3, { 11.11f, 11.22f, 11.33f, 0.0f } },
|
||||
{ "Attribute12", A, 12, 12, 4, { 12.11f, 12.22f, 12.33f, 12.44f } },
|
||||
{ "Attribute12", A, 13, -1, 4, { 13.11f, 13.22f, 13.33f, 13.44f } },
|
||||
{ "Attribute12", A, 14, -1, 4, { 14.11f, 14.22f, 14.33f, 14.44f } },
|
||||
{ "Attribute12", A, 15, -1, 4, { 15.11f, 15.22f, 15.33f, 15.44f } },
|
||||
{ "gl_Vertex", V, 16, -1, 4, { 0.25f, -0.14f, 0.01f, 1.0f } }
|
||||
};
|
||||
|
||||
static void im_render ()
|
||||
{
|
||||
GLint i;
|
||||
|
||||
glBegin (GL_POINTS);
|
||||
for (i = 0; i < sizeof (attribs) / sizeof (*attribs); i++) {
|
||||
struct ATTRIB_DATA *att = &attribs[i];
|
||||
switch (att->dispatch)
|
||||
{
|
||||
case C:
|
||||
glColor4fv (att->data);
|
||||
break;
|
||||
case S:
|
||||
glSecondaryColor3fvEXT (att->data);
|
||||
break;
|
||||
case N:
|
||||
glNormal3fv (att->data);
|
||||
break;
|
||||
case V:
|
||||
glVertex4fv (att->data);
|
||||
break;
|
||||
case T:
|
||||
assert (att->index >= 0 && att->index < 8);
|
||||
glMultiTexCoord4fvARB (GL_TEXTURE0_ARB + att->index, att->data);
|
||||
break;
|
||||
case F:
|
||||
glFogCoordfvEXT (att->data);
|
||||
break;
|
||||
case A:
|
||||
assert (att->index > 0 && att->index < 16);
|
||||
glVertexAttrib4fvARB (att->index, att->data);
|
||||
break;
|
||||
default:
|
||||
assert (0);
|
||||
}
|
||||
}
|
||||
glEnd ();
|
||||
}
|
||||
|
||||
static void va_render ()
|
||||
{
|
||||
GLint i;
|
||||
|
||||
for (i = 0; i < sizeof (attribs) / sizeof (*attribs); i++) {
|
||||
struct ATTRIB_DATA *att = &attribs[i];
|
||||
switch (att->dispatch)
|
||||
{
|
||||
case C:
|
||||
glColorPointer (4, GL_FLOAT, 0, att->data);
|
||||
glEnableClientState (GL_COLOR_ARRAY);
|
||||
break;
|
||||
case S:
|
||||
glSecondaryColorPointerEXT (4, GL_FLOAT, 0, att->data);
|
||||
glEnableClientState (GL_SECONDARY_COLOR_ARRAY_EXT);
|
||||
break;
|
||||
case N:
|
||||
glNormalPointer (GL_FLOAT, 0, att->data);
|
||||
glEnableClientState (GL_NORMAL_ARRAY);
|
||||
break;
|
||||
case V:
|
||||
glVertexPointer (4, GL_FLOAT, 0, att->data);
|
||||
glEnableClientState (GL_VERTEX_ARRAY);
|
||||
break;
|
||||
case T:
|
||||
assert (att->index >= 0 && att->index < 8);
|
||||
glClientActiveTextureARB (GL_TEXTURE0_ARB + att->index);
|
||||
glTexCoordPointer (4, GL_FLOAT, 0, att->data);
|
||||
glEnableClientState (GL_TEXTURE_COORD_ARRAY);
|
||||
break;
|
||||
case F:
|
||||
glFogCoordPointerEXT (GL_FLOAT, 0, att->data);
|
||||
glEnableClientState (GL_FOG_COORDINATE_ARRAY_EXT);
|
||||
break;
|
||||
case A:
|
||||
assert (att->index > 0 && att->index < 16);
|
||||
glVertexAttribPointerARB (att->index, 4, GL_FLOAT, GL_FALSE, 0, att->data);
|
||||
glEnableVertexAttribArrayARB (att->index);
|
||||
break;
|
||||
default:
|
||||
assert (0);
|
||||
}
|
||||
}
|
||||
|
||||
glDrawArrays (GL_POINTS, 0, 1);
|
||||
|
||||
for (i = 0; i < sizeof (attribs) / sizeof (*attribs); i++) {
|
||||
struct ATTRIB_DATA *att = &attribs[i];
|
||||
switch (att->dispatch)
|
||||
{
|
||||
case C:
|
||||
glDisableClientState (GL_COLOR_ARRAY);
|
||||
break;
|
||||
case S:
|
||||
glDisableClientState (GL_SECONDARY_COLOR_ARRAY_EXT);
|
||||
break;
|
||||
case N:
|
||||
glDisableClientState (GL_NORMAL_ARRAY);
|
||||
break;
|
||||
case V:
|
||||
glDisableClientState (GL_VERTEX_ARRAY);
|
||||
break;
|
||||
case T:
|
||||
glClientActiveTextureARB (GL_TEXTURE0_ARB + att->index);
|
||||
glDisableClientState (GL_TEXTURE_COORD_ARRAY);
|
||||
break;
|
||||
case F:
|
||||
glDisableClientState (GL_FOG_COORDINATE_ARRAY_EXT);
|
||||
break;
|
||||
case A:
|
||||
glDisableVertexAttribArrayARB (att->index);
|
||||
break;
|
||||
default:
|
||||
assert (0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void dl_start ()
|
||||
{
|
||||
glNewList (GL_COMPILE, 1);
|
||||
}
|
||||
|
||||
static void dl_end ()
|
||||
{
|
||||
glEndList ();
|
||||
glCallList (1);
|
||||
}
|
||||
|
||||
static void load_test_file (const char *filename)
|
||||
{
|
||||
FILE *f;
|
||||
GLint size;
|
||||
char *code;
|
||||
GLint i;
|
||||
|
||||
f = fopen (filename, "r");
|
||||
if (f == NULL)
|
||||
return;
|
||||
|
||||
fseek (f, 0, SEEK_END);
|
||||
size = ftell (f);
|
||||
|
||||
if (size == -1) {
|
||||
fclose (f);
|
||||
return;
|
||||
}
|
||||
|
||||
fseek (f, 0, SEEK_SET);
|
||||
|
||||
code = (char *) (malloc (size));
|
||||
if (code == NULL) {
|
||||
fclose (f);
|
||||
return;
|
||||
}
|
||||
size = fread (code, 1, size, f);
|
||||
fclose (f);
|
||||
|
||||
glShaderSourceARB (vert, 1, (const GLcharARB **) (&code), &size);
|
||||
glCompileShaderARB (vert);
|
||||
if (!CheckObjectStatus (vert))
|
||||
exit (0);
|
||||
|
||||
for (i = 0; i < sizeof (attribs) / sizeof (*attribs); i++)
|
||||
if (attribs[i].dispatch == A && attribs[i].bind != -1)
|
||||
glBindAttribLocationARB (prog, attribs[i].bind, attribs[i].name);
|
||||
}
|
||||
|
||||
void InitScene (void)
|
||||
{
|
||||
prog = glCreateProgramObjectARB ();
|
||||
vert = glCreateShaderObjectARB (GL_VERTEX_SHADER_ARB);
|
||||
glAttachObjectARB (prog, vert);
|
||||
glDeleteObjectARB (vert);
|
||||
load_test_file ("vstest.txt");
|
||||
glLinkProgramARB (prog);
|
||||
if (!CheckObjectStatus (prog))
|
||||
exit (0);
|
||||
glUseProgramObjectARB (prog);
|
||||
}
|
||||
|
||||
void RenderScene (void)
|
||||
{
|
||||
GLint info_length, length;
|
||||
char output[65000], *p;
|
||||
GLint i;
|
||||
|
||||
if (submit_method == SM_MAX)
|
||||
exit (0);
|
||||
|
||||
/*
|
||||
* Get the current size of the info log. Any text output produced by executed
|
||||
* shader will be appended to the end of log.
|
||||
*/
|
||||
glGetObjectParameterivARB (vert, GL_OBJECT_INFO_LOG_LENGTH_ARB, &info_length);
|
||||
|
||||
switch (submit_method)
|
||||
{
|
||||
case SM_IM:
|
||||
printf ("\n--- TESTING IMMEDIATE MODE\n");
|
||||
im_render ();
|
||||
break;
|
||||
case SM_VA:
|
||||
printf ("\n--- TESTING VERTEX ARRAY MODE\n");
|
||||
va_render ();
|
||||
break;
|
||||
case SM_IM_DL:
|
||||
printf ("\n--- TESTING IMMEDIATE + DISPLAY LIST MODE\n");
|
||||
dl_start ();
|
||||
im_render ();
|
||||
dl_end ();
|
||||
break;
|
||||
case SM_VA_DL:
|
||||
printf ("\n--- TESTING VERTEX ARRAY + DISPLAY LIST MODE\n");
|
||||
dl_start ();
|
||||
va_render ();
|
||||
dl_end ();
|
||||
break;
|
||||
default:
|
||||
assert (0);
|
||||
}
|
||||
|
||||
glFlush ();
|
||||
|
||||
/*
|
||||
* Get the info log and set the pointer to the beginning of the output.
|
||||
*/
|
||||
glGetInfoLogARB (vert, sizeof (output), &length, output);
|
||||
p = output + info_length - 1;
|
||||
|
||||
for (i = 0; i < sizeof (attribs) / sizeof (*attribs); i++) {
|
||||
GLuint j;
|
||||
for (j = 0; j < attribs[i].size; j++) {
|
||||
GLfloat value;
|
||||
if (p == NULL) {
|
||||
printf ("*** %s\n", "I/O error");
|
||||
break;
|
||||
}
|
||||
if (strncmp (p, "true", 4) == 0)
|
||||
value = 1.0f;
|
||||
else if (strncmp (p, "false", 5) == 0)
|
||||
value = 0.0f;
|
||||
else if (sscanf (p, "%f", &value) != 1) {
|
||||
printf ("*** %s\n", "I/O error");
|
||||
p = NULL;
|
||||
break;
|
||||
}
|
||||
if (fabs (value - attribs[i].data[j]) > EPSILON)
|
||||
printf ("*** %s, is %f, should be %f\n", "Values are different", value, attribs[i].data[j]);
|
||||
p = strchr (p, '\n');
|
||||
if (p != NULL)
|
||||
p++;
|
||||
}
|
||||
if (p == NULL)
|
||||
break;
|
||||
}
|
||||
|
||||
submit_method++;
|
||||
}
|
||||
|
||||
int main (int argc, char *argv[])
|
||||
{
|
||||
InitFramework (&argc, argv);
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -1,68 +0,0 @@
|
|||
/*
|
||||
* Vertex shader test.
|
||||
* Uses all conventional attributes and 15 generic attributes to print
|
||||
* their values, using printMESA() extension function, to the debugger
|
||||
* to compare them with the actual passed-in values.
|
||||
* Use different types for generic attributes to check matrix handling.
|
||||
*
|
||||
* Author: Michal Krol
|
||||
*/
|
||||
|
||||
#version 110
|
||||
|
||||
#extension MESA_shader_debug: require
|
||||
|
||||
attribute vec4 Attribute1;
|
||||
attribute vec4 Attribute2;
|
||||
attribute vec4 Attribute3;
|
||||
attribute float Attribute4;
|
||||
attribute vec2 Attribute5;
|
||||
attribute vec3 Attribute6;
|
||||
attribute mat2 Attribute7;
|
||||
attribute mat3 Attribute9;
|
||||
attribute mat4 Attribute12;
|
||||
|
||||
void main ()
|
||||
{
|
||||
//
|
||||
// Do some legal stuff.
|
||||
//
|
||||
gl_Position = gl_ModelViewMatrix * gl_Vertex;
|
||||
gl_FrontColor = vec4 (1.0);
|
||||
|
||||
//
|
||||
// Conventional attributes - except for gl_Vertex.
|
||||
//
|
||||
printMESA (gl_Color);
|
||||
printMESA (gl_SecondaryColor);
|
||||
printMESA (gl_Normal);
|
||||
printMESA (gl_MultiTexCoord0);
|
||||
printMESA (gl_MultiTexCoord1);
|
||||
printMESA (gl_MultiTexCoord2);
|
||||
printMESA (gl_MultiTexCoord3);
|
||||
printMESA (gl_MultiTexCoord4);
|
||||
printMESA (gl_MultiTexCoord5);
|
||||
printMESA (gl_MultiTexCoord6);
|
||||
printMESA (gl_MultiTexCoord7);
|
||||
printMESA (gl_FogCoord);
|
||||
|
||||
//
|
||||
// Generic attributes - attrib with index 0 is not used because it would
|
||||
// alias with gl_Vertex, which is not allowed.
|
||||
//
|
||||
printMESA (Attribute1);
|
||||
printMESA (Attribute2);
|
||||
printMESA (Attribute3);
|
||||
printMESA (Attribute4);
|
||||
printMESA (Attribute5);
|
||||
printMESA (Attribute6);
|
||||
printMESA (Attribute7);
|
||||
printMESA (Attribute9);
|
||||
printMESA (Attribute12);
|
||||
|
||||
//
|
||||
// Vertex position goes last.
|
||||
//
|
||||
printMESA (gl_Vertex);
|
||||
}
|
||||
|
|
@ -1,94 +0,0 @@
|
|||
# Microsoft Developer Studio Project File - Name="cltest" - Package Owner=<4>
|
||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||
# ** DO NOT EDIT **
|
||||
|
||||
# TARGTYPE "Win32 (x86) Console Application" 0x0103
|
||||
|
||||
CFG=cltest - Win32 Debug
|
||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||
!MESSAGE use the Export Makefile command and run
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "cltest.mak".
|
||||
!MESSAGE
|
||||
!MESSAGE You can specify a configuration when running NMAKE
|
||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "cltest.mak" CFG="cltest - Win32 Debug"
|
||||
!MESSAGE
|
||||
!MESSAGE Possible choices for configuration are:
|
||||
!MESSAGE
|
||||
!MESSAGE "cltest - Win32 Release" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE "cltest - Win32 Debug" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE
|
||||
|
||||
# Begin Project
|
||||
# PROP AllowPerConfigDependencies 0
|
||||
# PROP Scc_ProjName ""
|
||||
# PROP Scc_LocalPath ""
|
||||
CPP=cl.exe
|
||||
RSC=rc.exe
|
||||
|
||||
!IF "$(CFG)" == "cltest - Win32 Release"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "Release"
|
||||
# PROP BASE Intermediate_Dir "Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "cltest_release"
|
||||
# PROP Intermediate_Dir "cltest_release"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||
# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||
# ADD BASE RSC /l 0x415 /d "NDEBUG"
|
||||
# ADD RSC /l 0x415 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
|
||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
|
||||
|
||||
!ELSEIF "$(CFG)" == "cltest - Win32 Debug"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "Debug"
|
||||
# PROP BASE Intermediate_Dir "Debug"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "cltest_debug"
|
||||
# PROP Intermediate_Dir "cltest_debug"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
||||
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
||||
# ADD BASE RSC /l 0x415 /d "_DEBUG"
|
||||
# ADD RSC /l 0x415 /d "_DEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||
|
||||
!ENDIF
|
||||
|
||||
# Begin Target
|
||||
|
||||
# Name "cltest - Win32 Release"
|
||||
# Name "cltest - Win32 Debug"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\cltest.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\cltest.txt
|
||||
# End Source File
|
||||
# End Target
|
||||
# End Project
|
|
@ -1,92 +0,0 @@
|
|||
# Microsoft Developer Studio Project File - Name="framework" - Package Owner=<4>
|
||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||
# ** DO NOT EDIT **
|
||||
|
||||
# TARGTYPE "Win32 (x86) Static Library" 0x0104
|
||||
|
||||
CFG=framework - Win32 Debug
|
||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||
!MESSAGE use the Export Makefile command and run
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "framework.mak".
|
||||
!MESSAGE
|
||||
!MESSAGE You can specify a configuration when running NMAKE
|
||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "framework.mak" CFG="framework - Win32 Debug"
|
||||
!MESSAGE
|
||||
!MESSAGE Possible choices for configuration are:
|
||||
!MESSAGE
|
||||
!MESSAGE "framework - Win32 Release" (based on "Win32 (x86) Static Library")
|
||||
!MESSAGE "framework - Win32 Debug" (based on "Win32 (x86) Static Library")
|
||||
!MESSAGE
|
||||
|
||||
# Begin Project
|
||||
# PROP AllowPerConfigDependencies 0
|
||||
# PROP Scc_ProjName ""
|
||||
# PROP Scc_LocalPath ""
|
||||
CPP=cl.exe
|
||||
RSC=rc.exe
|
||||
|
||||
!IF "$(CFG)" == "framework - Win32 Release"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "Release"
|
||||
# PROP BASE Intermediate_Dir "Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "framework_release"
|
||||
# PROP Intermediate_Dir "framework_release"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
|
||||
# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
|
||||
# ADD BASE RSC /l 0x415 /d "NDEBUG"
|
||||
# ADD RSC /l 0x415 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LIB32=link.exe -lib
|
||||
# ADD BASE LIB32 /nologo
|
||||
# ADD LIB32 /nologo
|
||||
|
||||
!ELSEIF "$(CFG)" == "framework - Win32 Debug"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "Debug"
|
||||
# PROP BASE Intermediate_Dir "Debug"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "framework_debug"
|
||||
# PROP Intermediate_Dir "framework_debug"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
|
||||
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
|
||||
# ADD BASE RSC /l 0x415 /d "_DEBUG"
|
||||
# ADD RSC /l 0x415 /d "_DEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LIB32=link.exe -lib
|
||||
# ADD BASE LIB32 /nologo
|
||||
# ADD LIB32 /nologo
|
||||
|
||||
!ENDIF
|
||||
|
||||
# Begin Target
|
||||
|
||||
# Name "framework - Win32 Release"
|
||||
# Name "framework - Win32 Debug"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\framework.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\framework.h
|
||||
# End Source File
|
||||
# End Target
|
||||
# End Project
|
|
@ -1,74 +0,0 @@
|
|||
Microsoft Developer Studio Workspace File, Format Version 6.00
|
||||
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "cltest"=".\cltest.dsp" - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name framework
|
||||
End Project Dependency
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "framework"=".\framework.dsp" - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "sotest"=".\sotest.dsp" - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name framework
|
||||
End Project Dependency
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "vstest"=".\vstest.dsp" - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name framework
|
||||
End Project Dependency
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Global:
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<3>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
|
@ -1,90 +0,0 @@
|
|||
# Microsoft Developer Studio Project File - Name="sotest" - Package Owner=<4>
|
||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||
# ** DO NOT EDIT **
|
||||
|
||||
# TARGTYPE "Win32 (x86) Console Application" 0x0103
|
||||
|
||||
CFG=sotest - Win32 Debug
|
||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||
!MESSAGE use the Export Makefile command and run
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "sotest.mak".
|
||||
!MESSAGE
|
||||
!MESSAGE You can specify a configuration when running NMAKE
|
||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "sotest.mak" CFG="sotest - Win32 Debug"
|
||||
!MESSAGE
|
||||
!MESSAGE Possible choices for configuration are:
|
||||
!MESSAGE
|
||||
!MESSAGE "sotest - Win32 Release" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE "sotest - Win32 Debug" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE
|
||||
|
||||
# Begin Project
|
||||
# PROP AllowPerConfigDependencies 0
|
||||
# PROP Scc_ProjName ""
|
||||
# PROP Scc_LocalPath ""
|
||||
CPP=cl.exe
|
||||
RSC=rc.exe
|
||||
|
||||
!IF "$(CFG)" == "sotest - Win32 Release"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "Release"
|
||||
# PROP BASE Intermediate_Dir "Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "sotest_release"
|
||||
# PROP Intermediate_Dir "sotest_release"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||
# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||
# ADD BASE RSC /l 0x415 /d "NDEBUG"
|
||||
# ADD RSC /l 0x415 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
|
||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
|
||||
|
||||
!ELSEIF "$(CFG)" == "sotest - Win32 Debug"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "Debug"
|
||||
# PROP BASE Intermediate_Dir "Debug"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "sotest_debug"
|
||||
# PROP Intermediate_Dir "sotest_debug"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
||||
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
||||
# ADD BASE RSC /l 0x415 /d "_DEBUG"
|
||||
# ADD RSC /l 0x415 /d "_DEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||
|
||||
!ENDIF
|
||||
|
||||
# Begin Target
|
||||
|
||||
# Name "sotest - Win32 Release"
|
||||
# Name "sotest - Win32 Debug"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\sotest.c
|
||||
# End Source File
|
||||
# End Target
|
||||
# End Project
|
|
@ -1,93 +0,0 @@
|
|||
# Microsoft Developer Studio Project File - Name="vstest" - Package Owner=<4>
|
||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||
# ** DO NOT EDIT **
|
||||
|
||||
# TARGTYPE "Win32 (x86) Console Application" 0x0103
|
||||
|
||||
CFG=vstest - Win32 Debug
|
||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||
!MESSAGE use the Export Makefile command and run
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "vstest.mak".
|
||||
!MESSAGE
|
||||
!MESSAGE You can specify a configuration when running NMAKE
|
||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "vstest.mak" CFG="vstest - Win32 Debug"
|
||||
!MESSAGE
|
||||
!MESSAGE Possible choices for configuration are:
|
||||
!MESSAGE
|
||||
!MESSAGE "vstest - Win32 Release" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE "vstest - Win32 Debug" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE
|
||||
|
||||
# Begin Project
|
||||
# PROP AllowPerConfigDependencies 0
|
||||
# PROP Scc_ProjName ""
|
||||
# PROP Scc_LocalPath ""
|
||||
CPP=cl.exe
|
||||
RSC=rc.exe
|
||||
|
||||
!IF "$(CFG)" == "vstest - Win32 Release"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "Release"
|
||||
# PROP BASE Intermediate_Dir "Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "vstest_release"
|
||||
# PROP Intermediate_Dir "vstest_release"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||
# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||
# ADD BASE RSC /l 0x415 /d "NDEBUG"
|
||||
# ADD RSC /l 0x415 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
|
||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
|
||||
|
||||
!ELSEIF "$(CFG)" == "vstest - Win32 Debug"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "Debug"
|
||||
# PROP BASE Intermediate_Dir "Debug"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "vstest_debug"
|
||||
# PROP Intermediate_Dir "vstest_debug"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
||||
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
||||
# ADD BASE RSC /l 0x415 /d "_DEBUG"
|
||||
# ADD RSC /l 0x415 /d "_DEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||
|
||||
!ENDIF
|
||||
|
||||
# Begin Target
|
||||
|
||||
# Name "vstest - Win32 Release"
|
||||
# Name "vstest - Win32 Debug"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\vstest.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\vstest.txt
|
||||
# End Source File
|
||||
# End Target
|
||||
# End Project
|
Loading…
Reference in New Issue