Click here to Skip to main content
15,888,610 members
Articles / Multimedia / OpenGL

Zoom An Image With Different Interpolation Types

Rate me:
Please Sign up or sign in to vote.
4.91/5 (57 votes)
21 Sep 2011CPOL13 min read 225K   14.6K   109  
Implementation of different interpolations[Bi-Linear and Bi-Cubic] with OpenGL.
#pragma once

#include "GLExtDef.h" // Hold definitions of opengl extensions.
#include "gl\gl.h"

typedef unsigned int GLhandleARB;
typedef char GLcharARB;

// This Singleton class hold all function pointers of opengl Extensions.
// Functions similar to opengl extension are provided in this class. 
// All function will call corresponding function pointer.
class GLExtension
{
private:
    // Typedefs.
    typedef GLhandleARB (APIENTRY*FPTR_glCreateProgramObjectARB)();
    typedef GLhandleARB (APIENTRY *FPTR_glCreateShaderObjectARB)( GLenum shaderType);
    typedef void (APIENTRY *FPTR_glShaderSourceARB)( GLhandleARB shader, GLuint number_strings,
                                                     const GLcharARB** strings, GLint* length);
    typedef void (APIENTRY* FPTR_glCompileShader)(GLhandleARB shader);
    typedef void (APIENTRY* FPTR_glAttachObjectARB)(GLhandleARB program, GLhandleARB shader);
    typedef void (APIENTRY* FPTR_glLinkProgramARB)(GLhandleARB program);
    typedef void (APIENTRY* FPTR_glUseProgramObjectARB)(GLhandleARB program);
    typedef void (APIENTRY* FPTR_glDeleteObjectARB)(GLhandleARB object);
    typedef void (APIENTRY* FPTR_glGetInfoLogARB)(GLhandleARB object, GLsizei maxLenght, GLsizei *length, GLbyte *infoLog);
    typedef GLint (APIENTRY* FPTR_glGetUniformLocationARB)(GLhandleARB program, const GLbyte * name);
    typedef GLint (APIENTRY* FPTR_glGetAttribLocationARB)(GLhandleARB program, const GLbyte* name);
    typedef void (APIENTRY* FPTR_glUniform1iARB)(GLuint index, int val);
    typedef void (APIENTRY* FPTR_glUniform1fARB)(GLuint index, float val);
    typedef void (APIENTRY * FPTR_glActiveTexture) (GLenum texture);

private:

    // Function pointers.
    FPTR_glCreateProgramObjectARB  Obj_glCreateProgramObjectARB;
    FPTR_glCreateShaderObjectARB   Obj_glCreateShaderObjectARB;
    FPTR_glShaderSourceARB         Obj_glShaderSourceARB;
    FPTR_glCompileShader           Obj_glCompileShader;
    FPTR_glAttachObjectARB         Obj_glAttachObjectARB;
    FPTR_glLinkProgramARB          Obj_glLinkProgramARB;
    FPTR_glUseProgramObjectARB     Obj_glUseProgramObjectARB;
    FPTR_glDeleteObjectARB         Obj_glDeleteObjectARB;
    FPTR_glGetInfoLogARB           Obj_glGetInfoLogARB;
    FPTR_glGetUniformLocationARB   Obj_glGetUniformLocationARB;
    FPTR_glGetAttribLocationARB    Obj_glGetAttribLocationARB;
    FPTR_glUniform1iARB            Obj_glUniform1iARB;
    FPTR_glUniform1fARB            Obj_glUniform1fARB;
    FPTR_glActiveTexture           Obj_glActiveTexture;

public:

    GLhandleARB glCreateProgramObjectARB();
    GLhandleARB glCreateShaderObjectARB(GLenum shaderType);
    void glShaderSourceARB( GLhandleARB shader, GLuint number_strings,
                            const GLcharARB** strings, GLint * length);
    void glAttachObjectARB(GLhandleARB program, GLhandleARB shader);
    void glLinkProgramARB(GLhandleARB program);
    void glCompileShader(GLhandleARB program);
    void glUseProgramObjectARB(GLhandleARB program);
    void glDeleteObjectARB(GLhandleARB object);
    void glGetInfoLogARB(GLhandleARB object, GLsizei maxLenght, GLsizei *length, GLbyte*infoLog);
    GLint glGetUniformLocationARB(GLhandleARB program, const GLbyte* name);
    GLint glGetAttribLocationARB(GLhandleARB program, const GLbyte* name);
    void glUniform1iARB(GLuint index, int val);
    void glUniform1fARB(GLuint index, float fval);
    void glActiveTexture(GLenum Texture);

public:

    static GLExtension& GetInstance();
    // pFailedFunction Return NULL is all wglGetProcAddress are success.
    // Else return the name of failed function. Application should delete this buffer.
    bool GetWglProcAddress( TCHAR*& pFailedFunction );

private:

    // Constructor and destructor defined in private section for Singleton behaviour.
    GLExtension(void);
    ~GLExtension(void);

public:

    bool m_bNonPowerOfTwo;
};

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
India India
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions