Texture blues

Member
Posts: 131
Joined: 2010.08
Post: #1
I am trying to render sprites:
Code:
NSRect LoadTexture(CFStringRef name)
{
    CFURLRef texture_url = CFBundleCopyResourceURL(
                                                   CFBundleGetMainBundle(),
                                                   name,
                                                   CFSTR("png"),
                                                   NULL);
    
    CGImageSourceRef image_source = CGImageSourceCreateWithURL(
                                                               texture_url,
                                                               NULL);
    
    CGImageRef image = CGImageSourceCreateImageAtIndex(
                                                       image_source,
                                                       0,
                                                       NULL);
    
    unsigned width = CGImageGetWidth(image);
    unsigned height = CGImageGetHeight(image);
    
    NSRect rect;
    rect.size.width = width;
    rect.size.height = height;
    rect.origin.x = 0;
    rect.origin.y = 0;
    
    void *data = malloc(width * height * 4);
    
    CGColorSpaceRef color_space = CGColorSpaceCreateDeviceRGB();
    
    CGContextRef context = CGBitmapContextCreate(
                                                 data,
                                                 width,
                                                 height,
                                                 8,
                                                 width * 4,
                                                 color_space,
                                                 kCGImageAlphaPremultipliedFirst);
    
    CGContextDrawImage(
                       context,
                       CGRectMake(0, 0, width, height),
                       image);
    
    GLuint texture_id;
    glGenTextures(1, &texture_id);
    glBindTexture(GL_TEXTURE_2D, texture_id);
    glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP_SGIS, GL_TRUE);
    glTexImage2D(
                 GL_TEXTURE_2D,
                 0,
                 GL_RGBA,
                 width,
                 height,
                 0,
                 GL_BGRA,
                 GL_UNSIGNED_INT_8_8_8_8_REV,
                 data);
    glTexParameteri(
                    GL_TEXTURE_2D,
                    GL_TEXTURE_WRAP_S,
                    GL_CLAMP_TO_BORDER);
    glTexParameteri(
                    GL_TEXTURE_2D,
                    GL_TEXTURE_MAG_FILTER,
                    GL_LINEAR);
    glTexParameteri(
                    GL_TEXTURE_2D,
                    GL_TEXTURE_MIN_FILTER,
                    GL_LINEAR_MIPMAP_LINEAR);
    
    CFRelease(context);
    CFRelease(color_space);
    free(data);
    CFRelease(image);
    CFRelease(image_source);
    CFRelease(texture_url);
    return rect;
}

This is in the draw method:
Code:
    glBegin(GL_QUADS);
        glTexCoord2f( 0, spriteRect.size.height );                          
        glVertex2f( 0, 0 );
        glTexCoord2f( spriteRect.size.width, spriteRect.size.height );    
        glVertex2f( spriteRect.size.width, 0 );
        glTexCoord2f( spriteRect.size.width, 0 );    
        glVertex2f( spriteRect.size.width, spriteRect.size.height );
        glTexCoord2f( 0, 0 );          
        glVertex2f( 0, spriteRect.size.height );
    glEnd();
These are the problems:
1. The only hues in the rendered textures are blue and white.
2. The images are scaled so that their height is equal to the view's height.

How to solve these?
Quote this message in a reply
Luminary
Posts: 5,143
Joined: 2002.04
Post: #2
If you haven't changed your projection matrix, the view's coords are -1..1 on all axes.
Quote this message in a reply
Member
Posts: 131
Joined: 2010.08
Post: #3
Alright, thanks.
Could someone help to solve these problems:
1. the textures are rendered in bluescale.
2. glEnable(GL_TEXTURE_2D) causes primitives to have some transparency.
Quote this message in a reply
Post Reply