SOL9 2.0 Class: OpenGLVertexAttribute
|
Source code
/******************************************************************************
*
* Copyright (c) 2016 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions, and the following disclaimer.
*
* 2. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*
* OpenGLVertexAttribute.h
*
*****************************************************************************/
#pragma once
#include <sol/opengl/OpenGLObject.h>
#include <sol/opengl2/OpenGLProgram.h>
namespace SOL {
class OpenGLVertexAttribute : public OpenGLObject {
#ifdef GL_VERSION_2_0
private:
GLuint index;
bool enable;
public:
OpenGLVertexAttribute(GLuint in, bool onoff=true)
:OpenGLObject(),
index(in),
enable(onoff)
{
if (index < 0) {
throw IException("Invalid attribute index:%d", index);
}
if (enable) {
enableArray();
}
}
~OpenGLVertexAttribute()
{
if (enable) {
disableArray();
}
}
public:
void disableArray()
{
static PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray = NULL;
if (glDisableVertexAttribArray == NULL) {
glDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC)load("glDisableVertexAttribArray");
}
glDisableVertexAttribArray(index);
}
//PFNGLDRAWBUFFERSPROC GlewBuffers::glDrawBuffers; //(GLsizei n, const GLenum* bufs);
void enableArray()
{
static PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray = NULL;
if (glEnableVertexAttribArray == NULL) {
glEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC)load("glEnableVertexAttribArray");
}
glEnableVertexAttribArray(index);
}
void getPointer(GLenum pname, void** pointer)
{
if (pointer == NULL) {
throw IException("Invalid pointer parameter.");
}
static PFNGLGETVERTEXATTRIBPOINTERVPROC glGetVertexAttribPointerv = NULL;
if (glGetVertexAttribPointerv == NULL) {
glGetVertexAttribPointerv = (PFNGLGETVERTEXATTRIBPOINTERVPROC)load("glGetVertexAttribPointerv");
}
glGetVertexAttribPointerv(index, pname, pointer);
}
void get(GLenum pname, GLdouble* params)
{
if (params == NULL) {
throw IException("Invalid parameter.");
}
static PFNGLGETVERTEXATTRIBDVPROC glGetVertexAttribdv = NULL;
if (glGetVertexAttribdv == NULL) {
glGetVertexAttribdv = (PFNGLGETVERTEXATTRIBDVPROC)load("glGetVertexAttribdv");
}
glGetVertexAttribdv(index, pname, params);
}
void get(GLenum pname, GLfloat* params)
{
if (params == NULL) {
throw IException("Invalid parameter.");
}
static PFNGLGETVERTEXATTRIBFVPROC glGetVertexAttribfv = NULL;
if (glGetVertexAttribfv == NULL) {
glGetVertexAttribfv = (PFNGLGETVERTEXATTRIBFVPROC)load("glGetVertexAttribfv");
}
glGetVertexAttribfv(index, pname, params);
}
void get(GLenum pname, GLint* params)
{
if (params == NULL) {
throw IException("Invalid parameter.");
}
static PFNGLGETVERTEXATTRIBIVPROC glGetVertexAttribiv = NULL;
if (glGetVertexAttribiv == NULL) {
glGetVertexAttribiv = (PFNGLGETVERTEXATTRIBIVPROC)load("glGetVertexAttribiv");
}
glGetVertexAttribiv(index, pname, params);
}
void set(GLdouble x)
{
static PFNGLVERTEXATTRIB1DPROC glVertexAttrib1d = NULL;
if (glVertexAttrib1d == NULL) {
glVertexAttrib1d = (PFNGLVERTEXATTRIB1DPROC)load("glVertexAttrib1d");
}
glVertexAttrib1d(index, x);
}
//<added date="2016/08/20">
void set(const GLdouble* v, size_t size)
{
if (v == NULL) {
throw IException("Invalid value parameter.");
}
if (size < 1 || size > 4) {
throw IException("Invalid size parameter.");
}
switch(size) {
case 1:
set1(v);
break;
case 2:
set2(v);
break;
case 3:
set3(v);
break;
case 4:
set4(v);
break;
}
}
void set(const GLfloat* v, size_t size)
{
if (v == NULL) {
throw IException("Invalid value parameter.");
}
if (size < 1 || size > 4) {
throw IException("Invalid size parameter.");
}
switch(size) {
case 1:
set1(v);
break;
case 2:
set2(v);
break;
case 3:
set3(v);
break;
case 4:
set4(v);
break;
}
}
void set(const GLbyte* v, size_t size)
{
if (v == NULL) {
throw IException("Invalid value parameter.");
}
if (size != 4) {
throw IException("Invalid size parameter.");
}
switch(size) {
case 4:
set4(v);
break;
}
}
void set(const GLubyte* v, size_t size)
{
if (v == NULL) {
throw IException("Invalid value parameter.");
}
if (size != 4) {
throw IException("Invalid size parameter.");
}
switch(size) {
case 4:
set4(v);
break;
}
}
void set(const GLushort* v, size_t size)
{
if (v == NULL) {
throw IException("Invalid value parameter.");
}
if (size != 4) {
throw IException("Invalid size parameter.");
}
switch(size) {
case 4:
set4(v);
break;
}
}
void set(const GLshort* v, size_t size)
{
if (v == NULL) {
throw IException("Invalid value parameter.");
}
if (size < 1 || size > 4) {
throw IException("Invalid size parameter.");
}
switch(size) {
case 1:
set1(v);
break;
case 2:
set2(v);
break;
case 3:
set3(v);
break;
case 4:
set4(v);
break;
}
}
void set(const GLint* v, size_t size)
{
if (v == NULL) {
throw IException("Invalid value parameter.");
}
if (size != 4) {
throw IException("Invalid size parameter.");
}
switch(size) {
case 4:
set4(v);
break;
}
}
//</added>
void set1(const GLdouble* v)
{
static PFNGLVERTEXATTRIB1DVPROC glVertexAttrib1dv = NULL;
if (glVertexAttrib1dv == NULL) {
glVertexAttrib1dv = (PFNGLVERTEXATTRIB1DVPROC)load("glVertexAttrib1dv");
}
glVertexAttrib1dv(index, v);
}
void set(GLfloat x)
{
static PFNGLVERTEXATTRIB1FPROC glVertexAttrib1f = NULL;
if (glVertexAttrib1f == NULL) {
glVertexAttrib1f = (PFNGLVERTEXATTRIB1FPROC)load("glVertexAttrib1f");
}
glVertexAttrib1f(index, x);
}
void set1(const GLfloat* v)
{
static PFNGLVERTEXATTRIB1FVPROC glVertexAttrib1fv = NULL;
if (glVertexAttrib1fv == NULL) {
glVertexAttrib1fv = (PFNGLVERTEXATTRIB1FVPROC)load("glVertexAttrib1fv");
}
glVertexAttrib1fv(index, v);
}
void set(GLshort x)
{
static PFNGLVERTEXATTRIB1SPROC glVertexAttrib1s = NULL;
if (glVertexAttrib1s == NULL) {
glVertexAttrib1s = (PFNGLVERTEXATTRIB1SPROC)load("glVertexAttrib1s");
}
glVertexAttrib1s(index, x);
}
void set1(const GLshort* v)
{
static PFNGLVERTEXATTRIB1SVPROC glVertexAttrib1sv = NULL;
if (glVertexAttrib1sv == NULL) {
glVertexAttrib1sv = (PFNGLVERTEXATTRIB1SVPROC)load("glVertexAttrib1sv");
}
glVertexAttrib1sv(index, v);
}
void set(GLdouble x, GLdouble y)
{
static PFNGLVERTEXATTRIB2DPROC glVertexAttrib2d = NULL;
if (glVertexAttrib2d == NULL) {
glVertexAttrib2d = (PFNGLVERTEXATTRIB2DPROC)load("glVertexAttrib2d");
}
glVertexAttrib2d(index, x, y);
}
void set2(const GLdouble* v)
{
static PFNGLVERTEXATTRIB2DVPROC glVertexAttrib2dv = NULL;
if (glVertexAttrib2dv == NULL) {
glVertexAttrib2dv = (PFNGLVERTEXATTRIB2DVPROC)load("glVertexAttrib2dv");
}
glVertexAttrib2dv(index, v);
}
void set(GLfloat x, GLfloat y)
{
static PFNGLVERTEXATTRIB2FPROC glVertexAttrib2f = NULL;
if (glVertexAttrib2f = NULL) {
glVertexAttrib2f = (PFNGLVERTEXATTRIB2FPROC)load("glVertexAttrib2f");
}
glVertexAttrib2f(index, x, y);
}
void set2(const GLfloat* v)
{
static PFNGLVERTEXATTRIB2FVPROC glVertexAttrib2fv = NULL;
if (glVertexAttrib2fv == NULL) {
glVertexAttrib2fv = (PFNGLVERTEXATTRIB2FVPROC)load("glVertexAttrib2fv");
}
glVertexAttrib2fv(index, v);
}
void set(GLshort x, GLshort y)
{
static PFNGLVERTEXATTRIB2SPROC glVertexAttrib2s = NULL;
if (glVertexAttrib2s == NULL) {
glVertexAttrib2s = (PFNGLVERTEXATTRIB2SPROC)load("glVertexAttrib2s");
}
glVertexAttrib2s(index, x, y);
}
void set2(const GLshort* v)
{
static PFNGLVERTEXATTRIB2SVPROC glVertexAttrib2sv = NULL;
if (glVertexAttrib2sv == NULL) {
glVertexAttrib2sv = (PFNGLVERTEXATTRIB2SVPROC)load("glVertexAttrib2sv");
}
glVertexAttrib2sv(index, v);
}
void set(GLdouble x, GLdouble y, GLdouble z)
{
static PFNGLVERTEXATTRIB3DPROC glVertexAttrib3d = NULL;
if (glVertexAttrib3d == NULL) {
glVertexAttrib3d = (PFNGLVERTEXATTRIB3DPROC)load("glVertexAttrib3d");
}
glVertexAttrib3d(index, x, y, z);
}
void set3(const GLdouble* v)
{
static PFNGLVERTEXATTRIB3DVPROC glVertexAttrib3dv = NULL;
if (glVertexAttrib3dv == NULL) {
glVertexAttrib3dv = (PFNGLVERTEXATTRIB3DVPROC)load("glVertexAttrib3dv");
}
glVertexAttrib3dv(index, v);
}
void set(GLfloat x, GLfloat y, GLfloat z)
{
static PFNGLVERTEXATTRIB3FPROC glVertexAttrib3f = NULL;
if (glVertexAttrib3f == NULL) {
glVertexAttrib3f = (PFNGLVERTEXATTRIB3FPROC)load("glVertexAttrib3f");
}
glVertexAttrib3f(index, x, y, z);
}
void set3(const GLfloat* v)
{
static PFNGLVERTEXATTRIB3FVPROC glVertexAttrib3fv = NULL;
if (glVertexAttrib3fv == NULL) {
glVertexAttrib3fv = (PFNGLVERTEXATTRIB3FVPROC)load("glVertexAttrib3fv");
}
glVertexAttrib3fv(index, v);
}
void set(GLshort x, GLshort y, GLshort z)
{
static PFNGLVERTEXATTRIB3SPROC glVertexAttrib3s = NULL;
if (glVertexAttrib3s == NULL) {
glVertexAttrib3s = (PFNGLVERTEXATTRIB3SPROC)load("glVertexAttrib3s");
}
glVertexAttrib3s(index, x, y, z);
}
void set3(const GLshort* v)
{
static PFNGLVERTEXATTRIB3SVPROC glVertexAttrib3sv = NULL;
if (glVertexAttrib3sv == NULL) {
glVertexAttrib3sv = (PFNGLVERTEXATTRIB3SVPROC)load("glVertexAttrib3sv");
}
glVertexAttrib3sv(index, v);
}
void set4N(const GLbyte* v)
{
static PFNGLVERTEXATTRIB4NBVPROC glVertexAttrib4Nbv = NULL;
if (glVertexAttrib4Nbv == NULL) {
glVertexAttrib4Nbv = (PFNGLVERTEXATTRIB4NBVPROC)load("glVertexAttrib4Nbv");
}
glVertexAttrib4Nbv(index, v);
}
void set4N(const GLint* v)
{
static PFNGLVERTEXATTRIB4NIVPROC glVertexAttrib4Niv = NULL;
if (glVertexAttrib4Niv == NULL) {
glVertexAttrib4Niv = (PFNGLVERTEXATTRIB4NIVPROC)load("glVertexAttrib4Niv");
}
glVertexAttrib4Niv(index, v);
}
void set4N(const GLshort* v)
{
static PFNGLVERTEXATTRIB4NSVPROC glVertexAttrib4Nsv = NULL;
if (glVertexAttrib4Nsv == NULL) {
glVertexAttrib4Nsv = (PFNGLVERTEXATTRIB4NSVPROC)load("glVertexAttrib4Nsv");
}
glVertexAttrib4Nsv(index, v);
}
void set(GLubyte x, GLubyte y, GLubyte z, GLubyte w)
{
static PFNGLVERTEXATTRIB4NUBPROC glVertexAttrib4Nub = NULL;
if (glVertexAttrib4Nub == NULL) {
glVertexAttrib4Nub = (PFNGLVERTEXATTRIB4NUBPROC)load("glVertexAttrib4Nub");
}
glVertexAttrib4Nub(index, x, y, z, w);
}
void set4N(const GLubyte* v)
{
static PFNGLVERTEXATTRIB4NUBVPROC glVertexAttrib4Nubv = NULL;
if (glVertexAttrib4Nubv == NULL) {
glVertexAttrib4Nubv = (PFNGLVERTEXATTRIB4NUBVPROC)load("glVertexAttrib4Nubv");
}
glVertexAttrib4Nubv(index, v);
}
void set4N(const GLuint* v)
{
static PFNGLVERTEXATTRIB4NUIVPROC glVertexAttrib4Nuiv = NULL;
if (glVertexAttrib4Nuiv == NULL) {
glVertexAttrib4Nuiv = (PFNGLVERTEXATTRIB4NUIVPROC)load("glVertexAttrib4Nuiv");
}
glVertexAttrib4Nuiv(index, v);
}
void set4N(const GLushort* v)
{
static PFNGLVERTEXATTRIB4NUSVPROC glVertexAttrib4Nusv = NULL;
if (glVertexAttrib4Nusv == NULL) {
glVertexAttrib4Nusv = (PFNGLVERTEXATTRIB4NUSVPROC)load("glVertexAttrib4Nusv");
}
glVertexAttrib4Nusv(index, v);
}
void set4(const GLbyte* v)
{
static PFNGLVERTEXATTRIB4BVPROC glVertexAttrib4bv = NULL;
if (glVertexAttrib4bv == NULL) {
glVertexAttrib4bv = (PFNGLVERTEXATTRIB4BVPROC)load("glVertexAttrib4bv");
}
glVertexAttrib4bv(index, v);
}
void set(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
{
static PFNGLVERTEXATTRIB4DPROC glVertexAttrib4d = NULL;
if (glVertexAttrib4d == NULL) {
glVertexAttrib4d = (PFNGLVERTEXATTRIB4DPROC)load("glVertexAttrib4d");
}
glVertexAttrib4d(index, x, y, z, w);
}
void set4(const GLdouble* v)
{
static PFNGLVERTEXATTRIB4DVPROC glVertexAttrib4dv = NULL;
if (glVertexAttrib4dv == NULL) {
glVertexAttrib4dv = (PFNGLVERTEXATTRIB4DVPROC)load("glVertexAttrib4dv");
}
glVertexAttrib4dv(index, v);
}
void set(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
{
static PFNGLVERTEXATTRIB4FPROC glVertexAttrib4f = NULL;
if (glVertexAttrib4f == NULL) {
glVertexAttrib4f = (PFNGLVERTEXATTRIB4FPROC)load("glVertexAttrib4f");
}
glVertexAttrib4f(index, x, y, z, w);
}
void set4(const GLfloat* v)
{
static PFNGLVERTEXATTRIB4FVPROC glVertexAttrib4fv = NULL;
if (glVertexAttrib4fv == NULL) {
glVertexAttrib4fv = (PFNGLVERTEXATTRIB4FVPROC)load("glVertexAttrib4fv");
}
glVertexAttrib4fv(index, v);
}
void set4(const GLint* v)
{
static PFNGLVERTEXATTRIB4IVPROC glVertexAttrib4iv = NULL;
if (glVertexAttrib4iv == NULL) {
glVertexAttrib4iv = (PFNGLVERTEXATTRIB4IVPROC)load("glVertexAttrib4iv");
}
glVertexAttrib4iv(index, v);
}
void set(GLshort x, GLshort y, GLshort z, GLshort w)
{
static PFNGLVERTEXATTRIB4SPROC glVertexAttrib4s = NULL;
if (glVertexAttrib4s == NULL) {
glVertexAttrib4s = (PFNGLVERTEXATTRIB4SPROC)load("glVertexAttrib4s");
}
glVertexAttrib4s(index, x, y, z, w);
}
void set4(const GLshort* v)
{
static PFNGLVERTEXATTRIB4SVPROC glVertexAttrib4sv = NULL;
if (glVertexAttrib4sv == NULL) {
glVertexAttrib4sv = (PFNGLVERTEXATTRIB4SVPROC)load("glVertexAttrib4sv");
}
glVertexAttrib4sv(index, v);
}
void set4(const GLubyte* v)
{
static PFNGLVERTEXATTRIB4UBVPROC glVertexAttrib4ubv = NULL;
if (glVertexAttrib4ubv == NULL) {
glVertexAttrib4ubv = (PFNGLVERTEXATTRIB4UBVPROC)load("glVertexAttrib4ubv");
}
glVertexAttrib4ubv(index, v);
}
void set4(const GLuint* v)
{
static PFNGLVERTEXATTRIB4UIVPROC glVertexAttrib4uiv = NULL;
if (glVertexAttrib4uiv == NULL) {
glVertexAttrib4uiv = (PFNGLVERTEXATTRIB4UIVPROC)load("glVertexAttrib4uiv");
}
glVertexAttrib4uiv(index, v);
}
void set4(const GLushort* v)
{
static PFNGLVERTEXATTRIB4USVPROC glVertexAttrib4usv = NULL;
if (glVertexAttrib4usv == NULL) {
glVertexAttrib4usv = (PFNGLVERTEXATTRIB4USVPROC)load("glVertexAttrib4usv");
}
glVertexAttrib4usv(index, v);
}
void setPointer(GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* pointer)
{
static PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer = NULL;
if (glVertexAttribPointer == NULL) {
glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC)load("glVertexAttribPointer");
}
glVertexAttribPointer(index, size, type, normalized, stride, pointer);
}
#endif
//<added date="2016/08/20">
#ifdef GL_VERSION_3_0
void getI(GLenum pname, GLint* params)
{
static PFNGLGETVERTEXATTRIBIIVPROC glGetVertexAttribIiv = NULL;
if (glGetVertexAttribIiv == NULL) {
glGetVertexAttribIiv = (PFNGLGETVERTEXATTRIBIIVPROC)load("glGetVertexAttribIiv");
}
glGetVertexAttribIiv(index, pname, params);
}
void getI(GLenum pname, GLuint* params)
{
static PFNGLGETVERTEXATTRIBIUIVPROC glGetVertexAttribIuiv = NULL;
if (glGetVertexAttribIuiv == NULL) {
glGetVertexAttribIuiv = (PFNGLGETVERTEXATTRIBIUIVPROC)load("glGetVertexAttribIuiv");
}
glGetVertexAttribIuiv(index, pname, params);
}
void setI(const GLint* v, size_t size)
{
if (v == NULL) {
throw IException("Invalid value parameter.");
}
if (size <= 0 || size >4) {
throw IException("Invalid size parameter.");
}
switch(size) {
case 1:
setI1(v);
break;
case 2:
setI2(v);
break;
case 3:
setI3(v);
break;
case 4:
setI4(v);
break;
default:
break;
}
}
void setI(const GLuint* v, size_t size)
{
if (v == NULL) {
throw IException("Invalid value parameter.");
}
if (size <= 0 || size >4) {
throw IException("Invalid size parameter.");
}
switch(size) {
case 1:
setI1(v);
break;
case 2:
setI2(v);
break;
case 3:
setI3(v);
break;
case 4:
setI4(v);
break;
default:
break;
}
}
void setI(const GLushort* v, size_t size)
{
if (v == NULL) {
throw IException("Invalid value parameter.");
}
if (size != 4) {
throw IException("Invalid size parameter.");
}
switch(size) {
case 4:
setI4(v);
break;
default:
break;
}
}
void setI(const GLshort* v, size_t size)
{
if (v == NULL) {
throw IException("Invalid value parameter.");
}
if (size != 4) {
throw IException("Invalid size parameter.");
}
switch(size) {
case 4:
setI4(v);
break;
default:
break;
}
}
void setI(const GLubyte* v, size_t size)
{
if (v == NULL) {
throw IException("Invalid value parameter.");
}
if (size != 4) {
throw IException("Invalid size parameter.");
}
switch(size) {
case 4:
setI4(v);
break;
default:
break;
}
}
void setI(const GLbyte* v, size_t size)
{
if (v == NULL) {
throw IException("Invalid value parameter.");
}
if (size != 4) {
throw IException("Invalid size parameter.");
}
switch(size) {
case 4:
setI4(v);
break;
default:
break;
}
}
void setI1(GLint v0)
{
static PFNGLVERTEXATTRIBI1IPROC glVertexAttribI1i = NULL;
if (glVertexAttribI1i == NULL) {
glVertexAttribI1i = (PFNGLVERTEXATTRIBI1IPROC)load("glVertexAttribI1i");
}
glVertexAttribI1i(index, v0);
}
void setI1(const GLint* v0)
{
if (v0 == NULL) {
throw IException("Invalid value parameter.");
}
static PFNGLVERTEXATTRIBI1IVPROC glVertexAttribI1iv = NULL;
if (glVertexAttribI1iv == NULL) {
glVertexAttribI1iv = (PFNGLVERTEXATTRIBI1IVPROC)load("glVertexAttribI1iv");
}
glVertexAttribI1iv(index, v0);
}
void setI1(GLuint v0)
{
static PFNGLVERTEXATTRIBI1UIPROC glVertexAttribI1ui = NULL;
if (glVertexAttribI1ui == NULL) {
glVertexAttribI1ui = (PFNGLVERTEXATTRIBI1UIPROC)load("glVertexAttribI1ui");
}
glVertexAttribI1ui(index, v0);
}
void setI1(const GLuint* v0)
{
if (v0 == NULL) {
throw IException("Invalid value parameter.");
}
static PFNGLVERTEXATTRIBI1UIVPROC glVertexAttribI1uiv = NULL;
if (glVertexAttribI1uiv == NULL) {
glVertexAttribI1uiv = (PFNGLVERTEXATTRIBI1UIVPROC)load("glVertexAttribI1uiv");
}
glVertexAttribI1uiv(index, v0);
}
void setI2(GLint v0, GLint v1)
{
static PFNGLVERTEXATTRIBI2IPROC glVertexAttribI2i = NULL;
if (glVertexAttribI2i == NULL) {
glVertexAttribI2i = (PFNGLVERTEXATTRIBI2IPROC)load("glVertexAttribI2i");
}
glVertexAttribI2i(index, v0, v1);
}
void setI2(const GLint* v0)
{
if (v0 == NULL) {
throw IException("Invalid value parameter.");
}
static PFNGLVERTEXATTRIBI2IVPROC glVertexAttribI2iv = NULL;
if (glVertexAttribI2iv == NULL) {
glVertexAttribI2iv = (PFNGLVERTEXATTRIBI2IVPROC)load("glVertexAttribI2iv");
}
glVertexAttribI2iv(index, v0);
}
void setI2(GLuint v0, GLuint v1)
{
static PFNGLVERTEXATTRIBI2UIPROC glVertexAttribI2u = NULL;
if (glVertexAttribI2u == NULL) {
glVertexAttribI2u = (PFNGLVERTEXATTRIBI2UIPROC)load("glVertexAttribI2u");
}
glVertexAttribI2u(index, v0, v1);
}
void setI2(const GLuint* v0)
{
if (v0 == NULL) {
throw IException("Invalid value parameter.");
}
static PFNGLVERTEXATTRIBI2UIVPROC glVertexAttribI2uiv = NULL;
if (glVertexAttribI2uiv == NULL) {
glVertexAttribI2uiv = (PFNGLVERTEXATTRIBI2UIVPROC)load("glVertexAttribI2uiv");
}
glVertexAttribI2uiv(index, v0);
}
void setI3(GLint v0, GLint v1, GLint v2)
{
static PFNGLVERTEXATTRIBI3IPROC glVertexAttribI3i = NULL;
if (glVertexAttribI3i == NULL) {
glVertexAttribI3i = (PFNGLVERTEXATTRIBI3IPROC)load("glVertexAttribI3i");
}
glVertexAttribI3i(index, v0, v1, v2);
}
void setI3(const GLint* v0)
{
if (v0 == NULL) {
throw IException("Invalid value parameter.");
}
static PFNGLVERTEXATTRIBI3IVPROC glVertexAttribI3iv = NULL;
if (glVertexAttribI3iv == NULL) {
glVertexAttribI3iv = (PFNGLVERTEXATTRIBI3IVPROC)load("glVertexAttribI3iv");
}
glVertexAttribI3iv(index, v0);
}
void setI3(GLuint v0, GLuint v1, GLuint v2)
{
static PFNGLVERTEXATTRIBI3UIPROC glVertexAttribI3ui = NULL;
if (glVertexAttribI3ui == NULL) {
glVertexAttribI3ui = (PFNGLVERTEXATTRIBI3UIPROC)load("glVertexAttribI3ui");
}
glVertexAttribI3ui(index, v0, v1, v2);
}
void setI3(const GLuint* v0)
{
if (v0 == NULL) {
throw IException("Invalid value parameter.");
}
static PFNGLVERTEXATTRIBI3UIVPROC glVertexAttribI3uiv = NULL;
if (glVertexAttribI3uiv == NULL) {
glVertexAttribI3uiv = (PFNGLVERTEXATTRIBI3UIVPROC)load("glVertexAttribI3uiv");
}
glVertexAttribI3uiv(index, v0);
}
void setI4(const GLbyte* v0)
{
if (v0 == NULL) {
throw IException("Invalid value parameter.");
}
static PFNGLVERTEXATTRIBI4BVPROC glVertexAttribI4bv = NULL;
if (glVertexAttribI4bv == NULL) {
glVertexAttribI4bv = (PFNGLVERTEXATTRIBI4BVPROC)load("glVertexAttribI4bv");
}
glVertexAttribI4bv(index, v0);
}
void setI4(GLint v0, GLint v1, GLint v2, GLint v3)
{
static PFNGLVERTEXATTRIBI4IPROC glVertexAttribI4i = NULL;
if (glVertexAttribI4i == NULL) {
glVertexAttribI4i = (PFNGLVERTEXATTRIBI4IPROC)load("glVertexAttribI4i");
}
glVertexAttribI4i(index, v0, v1, v2, v3);
}
void setI4(const GLint* v0)
{
if (v0 == NULL) {
throw IException("Invalid value parameter.");
}
static PFNGLVERTEXATTRIBI4IVPROC glVertexAttribI4iv = NULL;
if (glVertexAttribI4iv == NULL) {
glVertexAttribI4iv = (PFNGLVERTEXATTRIBI4IVPROC)load("glVertexAttribI4iv");
}
glVertexAttribI4iv(index, v0);
}
void setI4(const GLshort* v0)
{
static PFNGLVERTEXATTRIBI4SVPROC glVertexAttribI4sv = NULL;
if (glVertexAttribI4sv == NULL) {
glVertexAttribI4sv = (PFNGLVERTEXATTRIBI4SVPROC)load("glVertexAttribI4sv");
}
glVertexAttribI4sv(index, v0);
}
void setI4(const GLubyte* v0)
{
if (v0 == NULL) {
throw IException("Invalid value parameter.");
}
static PFNGLVERTEXATTRIBI4UBVPROC glVertexAttribI4ubv = NULL;
if (glVertexAttribI4ubv == NULL) {
glVertexAttribI4ubv = (PFNGLVERTEXATTRIBI4UBVPROC)load("glVertexAttribI4ubv");
}
glVertexAttribI4ubv(index, v0);
}
void setI4(GLuint v0, GLuint v1, GLuint v2, GLuint v3)
{
static PFNGLVERTEXATTRIBI4UIPROC glVertexAttribI4ui = NULL;
if (glVertexAttribI4ui == NULL) {
glVertexAttribI4ui = (PFNGLVERTEXATTRIBI4UIPROC)load("glVertexAttribI4ui");
}
glVertexAttribI4ui(index, v0, v1, v2, v3);
}
void setI4(const GLuint* v0)
{
if (v0 == NULL) {
throw IException("Invalid value parameter.");
}
\
static PFNGLVERTEXATTRIBI4UIVPROC glVertexAttribI4uiv = NULL;
if (glVertexAttribI4uiv == NULL) {
glVertexAttribI4uiv = (PFNGLVERTEXATTRIBI4UIVPROC)load("glVertexAttribI4uiv");
}
glVertexAttribI4uiv(index, v0);
}
void setI4(const GLushort* v0)
{
if (v0 == NULL) {
throw IException("Invalid value parameter.");
}
static PFNGLVERTEXATTRIBI4USVPROC glVertexAttribI4usv = NULL;
if (glVertexAttribI4usv == NULL) {
glVertexAttribI4usv = (PFNGLVERTEXATTRIBI4USVPROC)load("glVertexAttribI4usv");
}
glVertexAttribI4usv(index, v0);
}
void setPointer(GLint size, GLenum type, GLsizei stride, const void* pointer)
{
if (pointer == NULL) {
throw IException("Invalid pointer parameter.");
}
static PFNGLVERTEXATTRIBIPOINTERPROC glVertexAttribIPointer = NULL;
if (glVertexAttribIPointer == NULL) {
glVertexAttribIPointer = (PFNGLVERTEXATTRIBIPOINTERPROC)load("glVertexAttribIPointer");
}
glVertexAttribIPointer(index, size, type, stride, pointer);
}
//</added>
#endif
#ifdef GL_VERSION_3_3
void divisor(GLuint div)
{
static PFNGLVERTEXATTRIBDIVISORPROC glVertexAttribDivisor = NULL;
if (glVertexAttribDivisor == NULL) {
glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISORPROC)load("glVertexAttribDivisor");
}
glVertexAttribDivisor(index, div);
}
#endif
};
}
Last modified: 5 May 2019
Copyright (c) 2009-2019 Antillia.com ALL RIGHTS RESERVED.