191 lines
6.1 KiB
C
191 lines
6.1 KiB
C
#include "pch.c"
|
|
#pragma hdrstop
|
|
|
|
#define WIDTH 256
|
|
#define HEIGHT 256
|
|
|
|
static PFNGLCOLORTABLEEXTPROC pfnColorTableEXT;
|
|
static PFNGLCOLORSUBTABLEEXTPROC pfnColorSubTableEXT;
|
|
static PFNGLGETCOLORTABLEEXTPROC pfnGetColorTableEXT;
|
|
static PFNGLGETCOLORTABLEPARAMETERIVEXTPROC pfnGetColorTableParameterivEXT;
|
|
static PFNGLGETCOLORTABLEPARAMETERFVEXTPROC pfnGetColorTableParameterfvEXT;
|
|
|
|
static BYTE wave_data[WIDTH];
|
|
static RGBQUAD wave_pal[256];
|
|
|
|
static void OglBounds(int *w, int *h)
|
|
{
|
|
*w = WIDTH;
|
|
*h = HEIGHT;
|
|
}
|
|
|
|
static void WaveTex(void)
|
|
{
|
|
int i;
|
|
BYTE *data;
|
|
int width;
|
|
|
|
width = WIDTH;
|
|
data = wave_data;
|
|
for (i = 0; i < width; i++)
|
|
{
|
|
*data++ = (BYTE)(i*255/(width-1));
|
|
}
|
|
for (i = 0; i < 256; i++)
|
|
{
|
|
wave_pal[i].rgbRed = i;
|
|
wave_pal[i].rgbGreen = i;
|
|
wave_pal[i].rgbBlue = i;
|
|
wave_pal[i].rgbReserved = 255;
|
|
}
|
|
}
|
|
|
|
static void OglDraw(int w, int h)
|
|
{
|
|
int iv[6];
|
|
float fv[6];
|
|
int i;
|
|
|
|
pfnColorTableEXT = (PFNGLCOLORTABLEEXTPROC)
|
|
wglGetProcAddress("glColorTableEXT");
|
|
if (pfnColorTableEXT == NULL)
|
|
{
|
|
printf("Unable to get glColorTableEXT\n");
|
|
exit(1);
|
|
}
|
|
pfnColorSubTableEXT = (PFNGLCOLORSUBTABLEEXTPROC)
|
|
wglGetProcAddress("glColorSubTableEXT");
|
|
if (pfnColorSubTableEXT == NULL)
|
|
{
|
|
printf("Unable to get glColorSubTableEXT\n");
|
|
exit(1);
|
|
}
|
|
pfnGetColorTableEXT = (PFNGLGETCOLORTABLEEXTPROC)
|
|
wglGetProcAddress("glGetColorTableEXT");
|
|
if (pfnGetColorTableEXT == NULL)
|
|
{
|
|
printf("Unable to get glGetColorTableEXT\n");
|
|
exit(1);
|
|
}
|
|
pfnGetColorTableParameterivEXT = (PFNGLGETCOLORTABLEPARAMETERIVEXTPROC)
|
|
wglGetProcAddress("glGetColorTableParameterivEXT");
|
|
if (pfnGetColorTableParameterivEXT == NULL)
|
|
{
|
|
printf("Unable to get glGetColorTableParameterivEXT\n");
|
|
exit(1);
|
|
}
|
|
pfnGetColorTableParameterfvEXT = (PFNGLGETCOLORTABLEPARAMETERFVEXTPROC)
|
|
wglGetProcAddress("glGetColorTableParameterfvEXT");
|
|
if (pfnGetColorTableParameterfvEXT == NULL)
|
|
{
|
|
printf("Unable to get glGetColorTableParameterfvEXT\n");
|
|
exit(1);
|
|
}
|
|
|
|
WaveTex();
|
|
|
|
glViewport(0, 0, w, h);
|
|
glMatrixMode(GL_PROJECTION);
|
|
glLoadIdentity();
|
|
glOrtho(0, WIDTH, 0, HEIGHT, -1, 1);
|
|
glMatrixMode(GL_MODELVIEW);
|
|
|
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_COLOR_INDEX8_EXT, WIDTH, 1, 0,
|
|
GL_COLOR_INDEX, GL_UNSIGNED_BYTE, wave_data);
|
|
|
|
pfnColorTableEXT(GL_TEXTURE_2D, GL_RGB, 256, GL_BGRA_EXT,
|
|
GL_UNSIGNED_BYTE, wave_pal);
|
|
|
|
pfnGetColorTableParameterivEXT(GL_TEXTURE_2D, GL_COLOR_TABLE_FORMAT_EXT,
|
|
&iv[0]);
|
|
pfnGetColorTableParameterivEXT(GL_TEXTURE_2D, GL_COLOR_TABLE_WIDTH_EXT,
|
|
&iv[1]);
|
|
pfnGetColorTableParameterivEXT(GL_TEXTURE_2D, GL_COLOR_TABLE_RED_SIZE_EXT,
|
|
&iv[2]);
|
|
pfnGetColorTableParameterivEXT(GL_TEXTURE_2D, GL_COLOR_TABLE_GREEN_SIZE_EXT,
|
|
&iv[3]);
|
|
pfnGetColorTableParameterivEXT(GL_TEXTURE_2D, GL_COLOR_TABLE_BLUE_SIZE_EXT,
|
|
&iv[4]);
|
|
pfnGetColorTableParameterivEXT(GL_TEXTURE_2D, GL_COLOR_TABLE_ALPHA_SIZE_EXT,
|
|
&iv[5]);
|
|
printf("Format %d, width %d, %d:%d:%d:%d\n", iv[0], iv[1],
|
|
iv[2], iv[3], iv[4], iv[5]);
|
|
|
|
pfnGetColorTableParameterfvEXT(GL_TEXTURE_2D, GL_COLOR_TABLE_FORMAT_EXT,
|
|
&fv[0]);
|
|
pfnGetColorTableParameterfvEXT(GL_TEXTURE_2D, GL_COLOR_TABLE_WIDTH_EXT,
|
|
&fv[1]);
|
|
pfnGetColorTableParameterfvEXT(GL_TEXTURE_2D, GL_COLOR_TABLE_RED_SIZE_EXT,
|
|
&fv[2]);
|
|
pfnGetColorTableParameterfvEXT(GL_TEXTURE_2D, GL_COLOR_TABLE_GREEN_SIZE_EXT,
|
|
&fv[3]);
|
|
pfnGetColorTableParameterfvEXT(GL_TEXTURE_2D, GL_COLOR_TABLE_BLUE_SIZE_EXT,
|
|
&fv[4]);
|
|
pfnGetColorTableParameterfvEXT(GL_TEXTURE_2D, GL_COLOR_TABLE_ALPHA_SIZE_EXT,
|
|
&fv[5]);
|
|
printf("Format %.1lf, width %.1lf, %.1lf:%.1lf:%.1lf:%.1lf\n",
|
|
fv[0], fv[1],
|
|
fv[2], fv[3], fv[4], fv[5]);
|
|
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
|
|
|
glEnable(GL_TEXTURE_2D);
|
|
|
|
glBegin(GL_POLYGON);
|
|
glTexCoord2f(0.0f, 0.0f);
|
|
glVertex2i(0, 0);
|
|
glTexCoord2f(0.0f, 1.0f);
|
|
glVertex2i(0, HEIGHT);
|
|
glTexCoord2f(1.0f, 1.0f);
|
|
glVertex2i(WIDTH/2, HEIGHT);
|
|
glTexCoord2f(1.0f, 0.0f);
|
|
glVertex2i(WIDTH/2, 0);
|
|
glEnd();
|
|
|
|
for (i = 64; i < 192; i++)
|
|
{
|
|
wave_pal[i].rgbRed = 0;
|
|
}
|
|
pfnColorSubTableEXT(GL_TEXTURE_2D, 64, 128, GL_BGRA_EXT,
|
|
GL_UNSIGNED_BYTE, wave_pal+64);
|
|
|
|
glBegin(GL_POLYGON);
|
|
glTexCoord2f(0.0f, 0.0f);
|
|
glVertex2i(WIDTH/2, 0);
|
|
glTexCoord2f(0.0f, 1.0f);
|
|
glVertex2i(WIDTH/2, HEIGHT);
|
|
glTexCoord2f(1.0f, 1.0f);
|
|
glVertex2i(WIDTH, HEIGHT);
|
|
glTexCoord2f(1.0f, 0.0f);
|
|
glVertex2i(WIDTH, 0);
|
|
glEnd();
|
|
|
|
memset(wave_pal, 0, sizeof(wave_pal));
|
|
pfnGetColorTableEXT(GL_TEXTURE_2D, GL_BGRA_EXT, GL_UNSIGNED_BYTE,
|
|
wave_pal);
|
|
for (i = 60; i < 68; i++)
|
|
{
|
|
printf("%d: %02X:%02X:%02X:%02X\n",
|
|
i, wave_pal[i].rgbRed, wave_pal[i].rgbGreen,
|
|
wave_pal[i].rgbBlue, wave_pal[i].rgbReserved);
|
|
}
|
|
for (i = 188; i < 196; i++)
|
|
{
|
|
printf("%d: %02X:%02X:%02X:%02X\n",
|
|
i, wave_pal[i].rgbRed, wave_pal[i].rgbGreen,
|
|
wave_pal[i].rgbBlue, wave_pal[i].rgbReserved);
|
|
}
|
|
}
|
|
|
|
OglModule oglmod_texpal =
|
|
{
|
|
"texpal",
|
|
NULL,
|
|
OglBounds,
|
|
NULL,
|
|
OglDraw
|
|
};
|