diff --git a/tools/emulator/opengl/host/tools/emugen/ApiGen.cpp b/tools/emulator/opengl/host/tools/emugen/ApiGen.cpp
index 9b7949d..dfba6a2 100644
--- a/tools/emulator/opengl/host/tools/emugen/ApiGen.cpp
+++ b/tools/emulator/opengl/host/tools/emugen/ApiGen.cpp
@@ -549,7 +549,6 @@
         std::string retvalType;
         if (!e->retval().isVoid()) {
             retvalType = e->retval().type()->name();
-            if (e->retval().isPointer()) retvalType += "*";
         }
 
         for (int pass = PASS_TmpBuffAlloc; pass < PASS_LAST; pass++) {
@@ -593,15 +592,15 @@
                                         (uint) j, varoffset.c_str());
                             }
                             if (pass == PASS_FunctionCall) {
-                                fprintf(fp, "(%s *)(ptr + %s + 4)",
+                                fprintf(fp, "(%s)(ptr + %s + 4)",
                                         v->type()->name().c_str(), varoffset.c_str());
                             } else if (pass == PASS_DebugPrint) {
-                                fprintf(fp, "(%s *)(ptr + %s + 4), *(unsigned int *)(ptr + %s)",
+                                fprintf(fp, "(%s)(ptr + %s + 4), *(unsigned int *)(ptr + %s)",
                                         v->type()->name().c_str(), varoffset.c_str(),
                                         varoffset.c_str());
                             }
                             varoffset += " + 4 + *(size_t *)(ptr +" + varoffset + ")";
-                        } else { // in pointer;
+                        } else { // out pointer;
                             if (pass == PASS_TmpBuffAlloc) {
                                 fprintf(fp, "\t\t\tsize_t tmpPtr%uSize = (size_t)*(unsigned int *)(ptr + %s);\n",
                                         (uint) j, varoffset.c_str());
@@ -611,16 +610,16 @@
                                     fprintf(fp, "\t\t\ttotalTmpSize += tmpPtr%uSize;\n", (uint)j);
                                 tmpBufOffset[j] = totalTmpBuffOffset;
                                 char tmpPtrName[16];
-                                sprintf(tmpPtrName,"tmpPtr%u", (uint)j);
+                                sprintf(tmpPtrName," + tmpPtr%uSize", (uint)j);
                                 totalTmpBuffOffset += std::string(tmpPtrName);
                                 totalTmpBuffExist = true;
                             } else if (pass == PASS_MemAlloc) {
                                 fprintf(fp, "\t\t\tunsigned char *tmpPtr%u = &tmpBuf[%s];\n",
                                         (uint)j, tmpBufOffset[j].c_str());
                             } else if (pass == PASS_FunctionCall) {
-                                fprintf(fp, "(%s *)(tmpPtr%u)", v->type()->name().c_str(), (uint) j);
+                                fprintf(fp, "(%s)(tmpPtr%u)", v->type()->name().c_str(), (uint) j);
                             } else if (pass == PASS_DebugPrint) {
-                                fprintf(fp, "(%s *)(tmpPtr%u), *(unsigned int *)(ptr + %s)",
+                                fprintf(fp, "(%s)(tmpPtr%u), *(unsigned int *)(ptr + %s)",
                                         v->type()->name().c_str(), (uint) j,
                                         varoffset.c_str());
                             }
diff --git a/tools/emulator/opengl/host/tools/emugen/EntryPoint.cpp b/tools/emulator/opengl/host/tools/emugen/EntryPoint.cpp
index d9b5499..f766dd9 100644
--- a/tools/emulator/opengl/host/tools/emugen/EntryPoint.cpp
+++ b/tools/emulator/opengl/host/tools/emugen/EntryPoint.cpp
@@ -37,7 +37,7 @@
     m_vars.empty();
 }
 
-bool parseTypeField(const std::string & f, std::string *vartype, bool *pointer_type, std::string *varname)
+bool parseTypeField(const std::string & f, std::string *vartype, std::string *varname)
 {
     size_t pos = 0, last;
     bool done = false;
@@ -45,7 +45,6 @@
 
     *vartype = "";
     if (varname != NULL) *varname = "";
-    *pointer_type = false;
 
     enum { ST_TYPE, ST_NAME, ST_END } state = ST_TYPE;
 
@@ -61,13 +60,6 @@
             } else {
                 // must be a type name;
                 *vartype = str;
-                // do we have an astriks at the end of the name?
-                if (vartype->at(vartype->size() - 1) == '*') {
-                    *pointer_type = true;
-                    // remove the astriks
-                    (*vartype)[vartype->size() - 1] = ' ';
-                    *vartype = trim(*vartype);
-                }
                 state = ST_NAME;
                 pos = last;
             }
@@ -76,14 +68,13 @@
             if (str.size() == 0) {
                 done = true;
             } else if (str == "*") {
-                *pointer_type = true;
-                // remove the leading astriks;
+                (*vartype) += "*";
                 pos = last;
             } else if (varname == NULL) {
                 done = true;
             } else {
-                if (str[0] == '*') {
-                    *pointer_type = true;
+                while (str[0] == '*') {
+                    (*vartype) += "*";
                     str[0] = ' ';
                     str = trim(str);
                 }
@@ -116,8 +107,7 @@
     // return type
     field = getNextToken(linestr, pos, &last, ",)");
     std::string retTypeName;
-    bool pointer_type;
-    if (!parseTypeField(field, &retTypeName, &pointer_type, NULL)) {
+    if (!parseTypeField(field, &retTypeName, NULL)) {
         fprintf(stderr, "line: %d: Parsing error in field <%s>\n", lc, field.c_str());
         return false;
     }
@@ -127,7 +117,7 @@
         fprintf(stderr, "UNKNOWN retval: %s\n", linestr.c_str());
     }
 
-    m_retval.init(std::string(""), theType, pointer_type, std::string(""), Var::POINTER_OUT, std::string(""));
+    m_retval.init(std::string(""), theType, std::string(""), Var::POINTER_OUT, std::string(""));
 
     // function name
     m_name = getNextToken(linestr, pos, &last, ",)");
@@ -138,7 +128,7 @@
     while (pos < linestr.size() - 1) {
         field = getNextToken(linestr, pos, &last, ",)");
         std::string vartype, varname;
-        if (!parseTypeField(field, &vartype, &pointer_type, &varname)) {
+        if (!parseTypeField(field, &vartype, &varname)) {
             fprintf(stderr, "line: %d: Parsing error in field <%s>\n", lc, field.c_str());
             return false;
         }
@@ -148,13 +138,13 @@
             fprintf(stderr, "%d: Unknown type: %s\n", lc, vartype.c_str());
         } else {
             if (varname == "" &&
-                !(v->name() == "void" && !pointer_type)) {
+                !(v->name() == "void" && !v->isPointer())) {
                 std::ostringstream oss;
                 oss << "var" << nvars;
                 varname = oss.str();
             }
 
-            m_vars.push_back(Var(varname, v, pointer_type, std::string(""), Var::POINTER_IN, ""));
+            m_vars.push_back(Var(varname, v, std::string(""), Var::POINTER_IN, ""));
         }
         pos = last + 1;
     }
@@ -166,9 +156,8 @@
                        const std::string & name_prefix,
                        const std::string & ctx_param ) const
 {
-    fprintf(fp, "%s%s %s%s%s(",
+    fprintf(fp, "%s %s%s%s(",
             m_retval.type()->name().c_str(),
-            m_retval.isPointer() ? "*" : "",
             name_prefix.c_str(),
             m_name.c_str(),
             name_suffix.c_str());
@@ -178,8 +167,7 @@
     for (size_t i = 0; i < m_vars.size(); i++) {
         if (m_vars[i].isVoid()) continue;
         if (i != 0 || ctx_param != "") fprintf(fp, ", ");
-        fprintf(fp, "%s %s%s", m_vars[i].type()->name().c_str(),
-                m_vars[i].isPointer() ? "*" : "",
+        fprintf(fp, "%s %s", m_vars[i].type()->name().c_str(),
                 m_vars[i].name().c_str());
     }
     fprintf(fp, ")%s", newline? "\n" : "");
diff --git a/tools/emulator/opengl/host/tools/emugen/TypeFactory.cpp b/tools/emulator/opengl/host/tools/emugen/TypeFactory.cpp
index 709807e..166b21a 100644
--- a/tools/emulator/opengl/host/tools/emugen/TypeFactory.cpp
+++ b/tools/emulator/opengl/host/tools/emugen/TypeFactory.cpp
@@ -48,18 +48,18 @@
     return v;
 }
 
-#define ADD_TYPE(name, size, printformat)                                           \
-    g_varMap.insert(std::pair<std::string, VarType>(name, VarType(g_typeId++, name, &g_var##size,printformat)));
+#define ADD_TYPE(name, size, printformat,ispointer)                                           \
+    g_varMap.insert(std::pair<std::string, VarType>(name, VarType(g_typeId++, name, &g_var##size , printformat , ispointer)));
 
 void TypeFactory::initBaseTypes()
 {
     g_initialized = true;
-    ADD_TYPE("UNKNOWN", 0, "0x%x");
-    ADD_TYPE("void", 0, "0x%x");
-    ADD_TYPE("char", 8, "%c");
-    ADD_TYPE("int", 32, "%d");
-    ADD_TYPE("float", 32, "%d");
-    ADD_TYPE("short", 16, "%d");
+    ADD_TYPE("UNKNOWN", 0, "0x%x", false);
+    ADD_TYPE("void", 0, "0x%x", false);
+    ADD_TYPE("char", 8, "%c", false);
+    ADD_TYPE("int", 32, "%d", false);
+    ADD_TYPE("float", 32, "%d", false);
+    ADD_TYPE("short", 16, "%d", false);
 }
 
 int TypeFactory::initFromFile(const std::string &filename)
@@ -103,6 +103,25 @@
             return -2;
         }
 
+        pos = last + 1;
+        std::string pointerDef;
+        pointerDef = getNextToken(str, pos, &last, WHITESPACE);
+        if (pointerDef.size() == 0) {
+            fprintf(stderr, "Error: %d : missing ispointer definition\n", lc);
+            return -2;
+        }
+
+        bool isPointer=false;
+        if (std::string("true")==pointerDef)
+          isPointer = true;
+        else if (std::string("false")==pointerDef)
+          isPointer = false;
+        else
+        {
+          fprintf(stderr, "Error: %d : invalid isPointer definition, must be either \"true\" or \"false\"\n", lc);
+          return -2;
+        }
+
         VarConverter *v = getVarConverter(atoi(size.c_str()));
         if (v == NULL) {
             fprintf(stderr, "Error: %d : unknown var width: %d\n", lc, atoi(size.c_str()));
@@ -114,7 +133,7 @@
                     "Warining: %d : type %s is already known, definition in line %d is taken\n",
                     lc, name.c_str(), lc);
         }
-        g_varMap.insert(std::pair<std::string, VarType>(name, VarType(g_typeId++, name, v ,printString)));
+        g_varMap.insert(std::pair<std::string, VarType>(name, VarType(g_typeId++, name, v ,printString,isPointer)));
     }
     g_initialized = true;
     return 0;
diff --git a/tools/emulator/opengl/host/tools/emugen/Var.h b/tools/emulator/opengl/host/tools/emugen/Var.h
index ef9f7c2..ba74cea 100644
--- a/tools/emulator/opengl/host/tools/emugen/Var.h
+++ b/tools/emulator/opengl/host/tools/emugen/Var.h
@@ -27,7 +27,6 @@
     Var() :
         m_name(""),
         m_type(NULL),
-        m_pointer(false),
         m_lenExpression(""),
         m_pointerDir(POINTER_IN),
         m_nullAllowed(false),
@@ -38,13 +37,11 @@
 
     Var(const std::string & name,
         const VarType * vartype,
-        bool isPointer,
         const std::string & lenExpression,
         PointerDir dir,
         const std::string &packExpression) :
         m_name(name),
         m_type(const_cast<VarType *>(vartype)),
-        m_pointer(isPointer),
         m_lenExpression(lenExpression),
         m_pointerDir(dir),
         m_nullAllowed(false),
@@ -53,11 +50,10 @@
     }
 
     void init(const std::string name, const VarType * vartype,
-              bool isPointer, std::string lenExpression,
+              std::string lenExpression,
               PointerDir dir, std::string packExpression) {
         m_name = name;
         m_type = vartype;
-        m_pointer = isPointer;
         m_lenExpression = lenExpression;
         m_packExpression = packExpression;
         m_pointerDir = dir;
@@ -67,8 +63,8 @@
 
     const std::string & name() const { return m_name; }
     const VarType * type() const { return m_type; }
-    bool isPointer() const { return m_pointer; }
-    bool isVoid() const { return ((m_type->bytes() == 0) && (m_pointer == false)); }
+    bool isPointer() const { return m_type->isPointer(); }
+    bool isVoid() const { return ((m_type->bytes() == 0) && (!m_type->isPointer())); }
     const std::string & lenExpression() const { return m_lenExpression; }
     const std::string & packExpression() const { return(m_packExpression); }
     void setLenExpression(const std::string & lenExpression) { m_lenExpression = lenExpression; }
@@ -77,7 +73,7 @@
     PointerDir pointerDir() { return m_pointerDir; }
     void setNullAllowed(bool state) { m_nullAllowed = state; }
     bool nullAllowed() const { return m_nullAllowed; }
-    void printType(FILE *fp) { fprintf(fp, "%s%s", m_type->name().c_str(), m_pointer ? "*" : ""); }
+    void printType(FILE *fp) { fprintf(fp, "%s", m_type->name().c_str()); }
     void printTypeName(FILE *fp) { printType(fp); fprintf(fp, " %s", m_name.c_str()); }
 
 private:
diff --git a/tools/emulator/opengl/host/tools/emugen/VarType.h b/tools/emulator/opengl/host/tools/emugen/VarType.h
index a0718bb..41bb645 100644
--- a/tools/emulator/opengl/host/tools/emugen/VarType.h
+++ b/tools/emulator/opengl/host/tools/emugen/VarType.h
@@ -50,12 +50,12 @@
 class VarType {
 public:
     VarType() :
-        m_id(0), m_name("default_constructed"), m_converter(NULL), m_printFomrat("0x%x")
+        m_id(0), m_name("default_constructed"), m_converter(NULL), m_printFomrat("0x%x"), m_isPointer(false)
     {
     }
 
-    VarType(size_t id, const std::string & name, const VarConverter * converter, const std::string & printFormat ) :
-        m_id(id), m_name(name), m_converter(const_cast<VarConverter *>(converter)), m_printFomrat(printFormat)
+    VarType(size_t id, const std::string & name, const VarConverter * converter, const std::string & printFormat , const bool isPointer) :
+        m_id(id), m_name(name), m_converter(const_cast<VarConverter *>(converter)), m_printFomrat(printFormat), m_isPointer(isPointer)
     {
     }
 
@@ -65,12 +65,14 @@
     const std::string & name() const { return m_name; }
     const std::string & printFormat() const { return m_printFomrat; }
     size_t bytes() const { return m_converter->bytes(); }
+    bool isPointer() const { return m_isPointer; }
     size_t id() const { return m_id; }
 private:
     size_t m_id;
     std::string m_name;
     VarConverter * m_converter;
     std::string m_printFomrat;
+    bool m_isPointer;
 };
 
 #endif
diff --git a/tools/emulator/opengl/system/GLESv1_enc/gl.attrib b/tools/emulator/opengl/system/GLESv1_enc/gl.attrib
index 6245dc5..9f776a9 100644
--- a/tools/emulator/opengl/system/GLESv1_enc/gl.attrib
+++ b/tools/emulator/opengl/system/GLESv1_enc/gl.attrib
@@ -4,6 +4,7 @@
 	
 #void glClipPlanef(GLenum plane, GLfloat *equation)
 glClipPlanef
+  dir equation in
 	len equation (4 * sizeof(float))
 
 #void glFogfv(GLenum pname, GLfloat *params)
@@ -73,11 +74,13 @@
 
 #void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data)
 glBufferSubData
+	dir data in
 	len data size
 
-#void glClipPlanex(GLenum plane, GLfixed *equation)
+#void glClipPlanex(GLenum plane, GLfixed *eqn)
 glClipPlanex
-	len equation (4 * sizeof(GLfixed))
+	dir eqn in
+	len eqn (4 * sizeof(GLfixed))
 
 #void glColorPointer(GLint size, GLenum type, GLsizei stride, GLvoid *pointer)
 #we treat the pointer as offset to a VBO
@@ -120,6 +123,7 @@
 #void glGetBufferParameteriv(GLenum target, GLenum pname, GLint *params)
 glGetBufferParameteriv
 	len params (sizeof(GLint))
+	dir params out
 
 #void glGenBuffers(GLsizei n, GLuint *buffers)
 glGenBuffers
@@ -133,6 +137,7 @@
 
 #void glGetFixedv(GLenum pname, GLfixed *params)
 glGetFixedv
+	dir params out
 	len params (glUtilsParamSize(pname) * sizeof(GLfixed))
 
 #void glGetIntegerv(GLenum pname, GLint *params)
@@ -156,16 +161,17 @@
 
 #GLubyte* glGetString(GLenum name)
 glGetString
+  flag unsupported
 
 #void glGetTexEnviv(GLenum env, GLenum pname, GLint *params)
 glGetTexEnviv
-#FIXME
-	len params (4)
+	dir params out
+	len params (glUtilsParamSize(pname) * sizeof(GLint))
 
 #void glGetTexEnvxv(GLenum env, GLenum pname, GLfixed *params)
 glGetTexEnvxv
-#FIXME
-	len params (4)
+	dir params out
+	len params (glUtilsParamSize(pname) * sizeof(GLfixed))
 
 #void glGetTexParameteriv(GLenum target, GLenum pname, GLint *params)
 glGetTexParameteriv
@@ -227,7 +233,8 @@
 
 #void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, GLvoid *pixels)
 glTexImage2D
-	len pixels pixelDataSize(self, width, height, format, type, 1)
+	dir pixels in
+	len pixels (pixels == NULL ? 0 : pixelDataSize(self, width, height, format, type, 1))
 
 #void glTexParameteriv(GLenum target, GLenum pname, GLint *params)
 glTexParameteriv
@@ -239,13 +246,11 @@
 
 #void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels)
 glTexSubImage2D
-#FIXME: this is bad
 	len pixels pixelDataSize(self, width, height, format, type, 1)
 
 #void glVertexPointer(GLint size, GLenum type, GLsizei stride, GLvoid *pointer)
 # we treat the pointer as an offset to a VBO
 glVertexPointer
-	len pointer (sizeof(unsigned int))
 	flag unsupported
 
 #void glPointSizePointerOES(GLenum type, GLsizei stride, GLvoid *pointer)
@@ -253,12 +258,10 @@
 	len pointer (sizeof(unsigned int))
 	flag unsupported
 
-#void glGetClipPlanef(...)
+#void glGetClipPlanef(GLenum pname, GLfloat * eqn)
 glGetClipPlanef
-	flag unsupported
-#void glGetClipPlanex(...)
-glGetClipPlanex
-	flag unsupported
+	dir eqn out
+	len eqn (4 * sizeof(GLfloat))
 
 #void glVertexPointerData(GLint size, GLenum type, GLsizei stride, void *data, GLuint datalen)
 glVertexPointerData
diff --git a/tools/emulator/opengl/system/GLESv1_enc/gl.in b/tools/emulator/opengl/system/GLESv1_enc/gl.in
index 10187b0..a1186d4 100644
--- a/tools/emulator/opengl/system/GLESv1_enc/gl.in
+++ b/tools/emulator/opengl/system/GLESv1_enc/gl.in
@@ -7,7 +7,7 @@
 GL_ENTRY(void, glFogf, GLenum pname, GLfloat param)
 GL_ENTRY(void, glFogfv, GLenum pname, const GLfloat *params)
 GL_ENTRY(void, glFrustumf, GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
-GL_ENTRY(void, glGetClipPlanef, GLenum pname, GLfloat eqn[4])
+GL_ENTRY(void, glGetClipPlanef, GLenum pname, GLfloat* eqn)
 GL_ENTRY(void, glGetFloatv, GLenum pname, GLfloat *params)
 GL_ENTRY(void, glGetLightfv, GLenum light, GLenum pname, GLfloat *params)
 GL_ENTRY(void, glGetMaterialfv, GLenum face, GLenum pname, GLfloat *params)
@@ -48,7 +48,6 @@
 GL_ENTRY(void, glClearDepthx, GLclampx depth)
 GL_ENTRY(void, glClearStencil, GLint s)
 GL_ENTRY(void, glClientActiveTexture, GLenum texture)
-GL_ENTRY(void, glClipPlanex, GLenum plane, const GLfixed *equation)
 GL_ENTRY(void, glColor4ub, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
 GL_ENTRY(void, glColor4x, GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha)
 GL_ENTRY(void, glColorMask, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
@@ -77,7 +76,7 @@
 GL_ENTRY(void, glFrustumx, GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar)
 GL_ENTRY(void, glGetBooleanv, GLenum pname, GLboolean *params)
 GL_ENTRY(void, glGetBufferParameteriv, GLenum target, GLenum pname, GLint *params)
-GL_ENTRY(void, glGetClipPlanex, GLenum pname, GLfixed eqn[4])
+GL_ENTRY(void, glClipPlanex, GLenum pname, GLfixed * eqn)
 GL_ENTRY(void, glGenBuffers, GLsizei n, GLuint *buffers)
 GL_ENTRY(void, glGenTextures, GLsizei n, GLuint *textures)
 GL_ENTRY(GLenum, glGetError, void)
@@ -144,15 +143,6 @@
 GL_ENTRY(void, glViewport, GLint x, GLint y, GLsizei width, GLsizei height)
 GL_ENTRY(void, glPointSizePointerOES, GLenum type, GLsizei stride, const GLvoid *pointer)
 
-GL_ENTRY(void, glDrawTexsOES, GLshort x, GLshort y, GLshort z, GLshort width, GLshort height)
-GL_ENTRY(void, glDrawTexiOES, GLint x, GLint y, GLint z, GLint width, GLint height)
-GL_ENTRY(void, glDrawTexxOES, GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height)
-GL_ENTRY(void, glDrawTexsvOES, const GLshort *coords)
-GL_ENTRY(void, glDrawTexivOES, const GLint *coords)
-GL_ENTRY(void, glDrawTexxvOES, const GLfixed *coords)
-GL_ENTRY(void, glDrawTexfOES, GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height)
-GL_ENTRY(void, glDrawTexfvOES, const GLfloat *coords)
-
 GL_ENTRY(void, glVertexPointerOffset, GLint size, GLenum type, GLsizei stride,  GLuint offset)
 GL_ENTRY(void, glColorPointerOffset, GLint size, GLenum type, GLsizei stride,  GLuint offset)
 GL_ENTRY(void, glNormalPointerOffset, GLenum type, GLsizei stride,  GLuint offset)
@@ -168,3 +158,11 @@
 GL_ENTRY(void, glDrawElementsOffset, GLenum mode, GLsizei count, GLenum type, GLuint offset)
 GL_ENTRY(void, glDrawElementsData, GLenum mode, GLsizei count, GLenum type, void *data, GLuint datalen)
 GL_ENTRY(void, glGetCompressedTextureFormats, int count, GLint *formats);
+GL_ENTRY(void, glDrawTexsOES, GLshort x, GLshort y, GLshort z, GLshort width, GLshort height)
+GL_ENTRY(void, glDrawTexiOES, GLint x, GLint y, GLint z, GLint width, GLint height)
+GL_ENTRY(void, glDrawTexxOES, GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height)
+GL_ENTRY(void, glDrawTexsvOES, const GLshort *coords)
+GL_ENTRY(void, glDrawTexivOES, const GLint *coords)
+GL_ENTRY(void, glDrawTexxvOES, const GLfixed *coords)
+GL_ENTRY(void, glDrawTexfOES, GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height)
+GL_ENTRY(void, glDrawTexfvOES, const GLfloat *coords)
\ No newline at end of file
diff --git a/tools/emulator/opengl/system/GLESv1_enc/gl.types b/tools/emulator/opengl/system/GLESv1_enc/gl.types
index 89a95c1..b269c01 100644
--- a/tools/emulator/opengl/system/GLESv1_enc/gl.types
+++ b/tools/emulator/opengl/system/GLESv1_enc/gl.types
@@ -1,17 +1,33 @@
-GLbitfield 32 0x%08x
-GLboolean 8 %d
-GLclampf 32 %f
-GLclampx 32 0x%08x
-GLeglImageOES 32 0x%08x
-GLenum 32 0x%08x
-GLfixed 32 0x%08x
-GLfloat 32 %f
-GLint 32 %d
-GLintptr 32 0x%08x
-GLshort 16 %d
-GLsizei 32 %d
-GLsizeiptr 32 0x%08x
-GLubyte 8 0x%02x
-GLuint 32 %u
-GLvoid 0 %x
-GLchar 8 %d
+GLbitfield 32 0x%08x false
+GLboolean 8 %d false
+GLclampf 32 %f false
+GLclampx 32 0x%08x false
+GLeglImageOES 32 %p false
+GLenum 32 0x%08x false
+GLfixed 32 0x%08x false
+GLfloat 32 %f false
+GLint 32 %d false
+GLintptr 32 %p false
+GLshort 16 %d false
+GLsizei 32 %d false
+GLsizeiptr 32 %p false
+GLubyte 8 0x%02x false
+GLuint 32 %u false
+GLvoid 0 %x false
+GLchar 8 %d false
+GLenum* 32 0x%08x true
+GLboolean* 32 0x%08x true
+GLclampf* 32 0x%08x true
+GLclampx* 32 0x%08x true
+GLeglImageOES* 32 0x%08x true
+GLfixed* 32 0x%08x true
+GLfloat* 32 0x%08x true
+GLint* 32 0x%08x true
+GLshort* 32 0x%08x true
+GLsizei* 32 0x%08x true
+GLubyte* 32 0x%08x true
+GLuint* 32 0x%08x true
+GLvoid* 32 0x%08x true
+GLchar* 32 0x%08x true
+GLvoid** 32 0x%08x true
+void* 32 0x%08x true
diff --git a/tools/emulator/opengl/tests/ut_rendercontrol_enc/ut_rendercontrol.types b/tools/emulator/opengl/tests/ut_rendercontrol_enc/ut_rendercontrol.types
index eb4dd1b..9d945ab 100644
--- a/tools/emulator/opengl/tests/ut_rendercontrol_enc/ut_rendercontrol.types
+++ b/tools/emulator/opengl/tests/ut_rendercontrol_enc/ut_rendercontrol.types
@@ -1,2 +1,2 @@
-uint32_t 32 0x%08x
+uint32_t 32 0x%08x false
 
