LWJGL Forum

Programming => OpenGL => Topic started by: odrya12 on May 14, 2011, 13:04:20

Title: sending texture into shader
Post by: odrya12 on May 14, 2011, 13:04:20
I tried to use this code and I do not understand what does not work ....
I created some functions will be easier for me to work:

public void draw_fast(Texture texture, int x, int y)
    {
    Color.white.bind();
texture.bind(); // or GL11.glBind(texture.getTextureID());

GL11.glBegin(GL11.GL_QUADS);
GL11.glTexCoord2f(0,0); GL11.glVertex2f(x, y);
GL11.glTexCoord2f(1,0); GL11.glVertex2f(x+texture.getTextureWidth(), y);
GL11.glTexCoord2f(1,1); GL11.glVertex2f(x+texture.getTextureWidth(), y+texture.getTextureHeight());
GL11.glTexCoord2f(0,1); GL11.glVertex2f(x, y+texture.getTextureHeight());
GL11.glEnd();
    }
private int createShader()
{
return ARBShaderObjects.glCreateProgramObjectARB();
}
private int createVertShader(String filename)
{
    //vertShader will be non zero if succefully created

    int vertShader = ARBShaderObjects.glCreateShaderObjectARB(ARBVertexShader.GL_VERTEX_SHADER_ARB);
    //if created, convert the vertex shader code to a String
    if(vertShader == 0)
    {
    return 0;
    }
    String vertexCode = "";
    String line;
    try
    {
        BufferedReader reader = new BufferedReader(new FileReader(filename));
        while((line=reader.readLine()) != null)
        {
        vertexCode += line + "\n";
        }
    }
    catch(Exception e)
    {
    System.out.println("Fail reading vertex shading code");
        return 0;
    }
    ARBShaderObjects.glShaderSourceARB(vertShader, vertexCode);
    ARBShaderObjects.glCompileShaderARB(vertShader);
        //if zero we won't be using the shader
    return vertShader;
}
private int createFragShader(String filename)
{
int fragShader = ARBShaderObjects.glCreateShaderObjectARB(ARBFragmentShader.GL_FRAGMENT_SHADER_ARB);
    if(fragShader == 0)
    {
        return 0;
    }
    String fragCode = "";
    String line;
    try
    {
        BufferedReader reader = new BufferedReader(new FileReader(filename));
        while((line=reader.readLine())!= null)
        {
            fragCode += line + "\n";
        }
    }
    catch(Exception e)
    {
        System.out.println("Fail reading fragment shading code");
        return 0;
    }
    ARBShaderObjects.glShaderSourceARB(fragShader, fragCode);
    ARBShaderObjects.glCompileShaderARB(fragShader);

    return fragShader;
}

public void installShader(int shader, int vertShader, int fragShader)
{
if(vertShader !=0 && fragShader !=0)
{
            ARBShaderObjects.glAttachObjectARB(shader, vertShader);
            ARBShaderObjects.glAttachObjectARB(shader, fragShader);
            ARBShaderObjects.glLinkProgramARB(shader);
            ARBShaderObjects.glValidateProgramARB(shader);
            ARBShaderObjects.glUseProgramObjectARB(shader);
}
           
}

public void ShaderAddTexture(int shader, Texture tt, String name, int id)
{
int loc = ARBShaderObjects.glGetUniformLocationARB(shader, name);
tt.bind();
ARBShaderObjects.glUniform1iARB(loc, id);
    }

public void useShader(int ss)
{
ARBShaderObjects.glUseProgramObjectARB(ss);
}
public void clearShader()
{
ARBShaderObjects.glUseProgramObjectARB(0);
}

Then I used them like this:
try
    {
dd = TextureLoader.getTexture("PNG", new FileInputStream("res/soldier.png"));
//spr_soldier = TextureLoader.getTexture("PNG", new FileInputStream("res/soldier.png"));
}
    catch (IOException e)
    {
// TODO Auto-generated catch block
e.printStackTrace();
}
my_shader = createShader();
        my_vert_shader = createVertShader("shaders/vertex_shader.vert");
        my_frag_shader = createFragShader("shaders/pixel_shaders.frag");
        installShader(my_shader, my_vert_shader, my_frag_shader);
        ShaderAddTexture(my_shader, dd, "tex0", 0);

I tried to draw it like this:
useShader(my_shader);
draw_fast(dd, 200, 200);
clearShader();

I do not understand what's wrong with that ...
I use C + + everything works for me with those files
Help me please
Title: Re: sending texture into shader
Post by: CodeBunny on May 14, 2011, 13:52:57
Does it crash? Do you get some sort of stack trace? Or does it just render a black screen?
Title: Re: sending texture into shader
Post by: odrya12 on May 14, 2011, 13:56:31
it render a black rectangle where the sprite should be.