Originally posted by vincoof:
[b]printf("Supported extensions : %s
", glGetString(GL_EXTENSIONS));
(edited: I’m late!)
Have you downloaded ATi’s fragment shader example program ? This one should work, otherwise this means there’s something wrong with your configuration, be it driver version or anything.[/b]
The ATI sample (using ARB_fragment_program) works fine. My ARB_fragment_program attempt didn’t work either (I started a new thread for that).
I couldn’t find an ATI sample that uses ATI_fragment_shader
This is my complete code:
#include <stdio.h>
#include <glut.h>
#include "ATIExtensions.h"
int width = 400;
int height = 400;
float distance = 0.0f;
float zoom = 60.0f;
GLuint nTex, nPalette, simpleFragmentShader;
void init()
{
// dependent texture
glGenTextures(1, &nTex);
glActiveTextureARB(GL_TEXTURE0_ARB);
glBindTexture(GL_TEXTURE_2D, nTex);
unsigned char pSlice[256*256], *ptr;
ptr = pSlice;
for(int i=0; i<256; ++i)
{
memset(ptr, i, 256);
ptr += 256;
}
glTexImage2D(GL_TEXTURE_2D, 0, 1, 256, 256, 0,GL_LUMINANCE, GL_UNSIGNED_BYTE, (void*) pSlice);
// texture palette
glGenTextures(1, &nPalette);
glActiveTextureARB( GL_TEXTURE1_ARB);
glBindTexture( GL_TEXTURE_1D, nPalette);
float pfLUT[256*4], *pPtr;
pPtr = pfLUT;
for(int l=0; l<256; ++l)
{
pPtr[0] = l < 128 ? 0.0 : 1.0;
pPtr[1] = pPtr[2] = pPtr[3] = 1.0;
pPtr += 4;
}
glTexImage1D(GL_TEXTURE_1D, 0, 4, 256, 0,GL_RGBA, GL_FLOAT, (void*) pfLUT);
simpleFragmentShader = glGenFragmentShadersATI(1);
glBindFragmentShaderATI(simpleFragmentShader);
glBeginFragmentShaderATI();
glSampleMapATI(GL_REG_0_ATI, GL_TEXTURE0_ARB, GL_SWIZZLE_STR_ATI);
glColorFragmentOp1ATI(GL_MOV_ATI, GL_REG_2_ATI, GL_NONE, GL_NONE, GL_REG_0_ATI, GL_NONE, GL_NONE);
glSampleMapATI(GL_REG_1_ATI, GL_REG_2_ATI, GL_SWIZZLE_STR_ATI);
glColorFragmentOp1ATI(GL_MOV_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, GL_REG_1_ATI, GL_NONE, GL_NONE);
glEndFragmentShaderATI();
}
//////////////////////////////////////////////////
void drawModel()
{
glEnable(GL_TEXTURE_2D);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glColor3f(0,1,0);
glActiveTextureARB(GL_TEXTURE0_ARB);
glBindTexture(GL_TEXTURE_2D, nTex);
glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glVertex2f(-.5, -.5);
glTexCoord2f(1, 0);
glVertex2f(.5, -.5);
glTexCoord2f(1, 1);
glVertex2f(.5, .5);
glTexCoord2f(0, 1);
glVertex2f(-.5, .5);
glEnd();
}
/////////////////////////////////////////////////
void draw()
{
glClear(GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(zoom, width/height, distance/10.0f, distance*2.0f);
glMatrixMode( GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -distance);
glBindFragmentShaderATI(simpleFragmentShader);
glEnable(GL_FRAGMENT_SHADER_ATI);
drawModel();
glDisable(GL_FRAGMENT_SHADER_ATI);
glActiveTextureARB(GL_TEXTURE0_ARB);
glutSwapBuffers();
}
/////////////////////////////////////////////////
int main( int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(width, height);
glutCreateWindow("Simple Shader- ATI Fragment Shader");
glutDisplayFunc(draw);
glutIdleFunc(draw);
SetupGL1_4();
SetupATIExtensions();
SetupARBExtensions();
init();
glutMainLoop();
glDeleteFragmentShaderATI(simpleFragmentShader);
}