Adding new object types for OpenGL ES 3.0
New objects:
- Sampler
- Transform feedback
- Vertex Array
Change-Id: I701ea5fea75b81196290c3bdb3230cd471cc537b
Reviewed-on: https://swiftshader-review.googlesource.com/2796
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/src/Main/Config.hpp b/src/Main/Config.hpp
index a5bc115..f94e447 100644
--- a/src/Main/Config.hpp
+++ b/src/Main/Config.hpp
@@ -76,6 +76,7 @@
MAX_UNIFORM_BLOCKS_COMPONENTS = 49152,
MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = MAX_UNIFORM_BLOCKS_COMPONENTS + 4 * FRAGMENT_UNIFORM_VECTORS,
MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = MAX_UNIFORM_BLOCKS_COMPONENTS + 4 * VERTEX_UNIFORM_VECTORS,
+ MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 4,
};
#endif // sw_Config_hpp
diff --git a/src/OpenGL/libGLESv2/Android.mk b/src/OpenGL/libGLESv2/Android.mk
index f2ce744..22c43e1 100644
--- a/src/OpenGL/libGLESv2/Android.mk
+++ b/src/OpenGL/libGLESv2/Android.mk
@@ -121,6 +121,7 @@
ResourceManager.cpp \
Shader.cpp \
Texture.cpp \
+ TransformFeedback.cpp \
utilities.cpp \
VertexDataManager.cpp \
diff --git a/src/OpenGL/libGLESv2/Context.cpp b/src/OpenGL/libGLESv2/Context.cpp
index 34e5ee3..a82b12f 100644
--- a/src/OpenGL/libGLESv2/Context.cpp
+++ b/src/OpenGL/libGLESv2/Context.cpp
@@ -24,8 +24,11 @@
#include "Program.h"
#include "Query.h"
#include "Renderbuffer.h"
+#include "Sampler.h"
#include "Shader.h"
#include "Texture.h"
+#include "TransformFeedback.h"
+#include "VertexArray.h"
#include "VertexDataManager.h"
#include "IndexDataManager.h"
#include "libEGL/Display.h"
@@ -138,6 +141,9 @@
mTextureCubeMapZero = new TextureCubeMap(0);
mTextureExternalZero = new TextureExternal(0);
+ mState.transformFeedback = new TransformFeedback(0);
+ mTransformFeedbackMap[0] = mState.transformFeedback;
+
mState.activeSampler = 0;
bindArrayBuffer(0);
bindElementArrayBuffer(0);
@@ -826,6 +832,36 @@
return handle;
}
+// Returns an unused vertex array name
+GLuint Context::createVertexArray()
+{
+ GLuint handle = mVertexArrayNameSpace.allocate();
+
+ mVertexArrayMap[handle] = NULL;
+
+ return handle;
+}
+
+// Returns an unused transform feedback name
+GLuint Context::createTransformFeedback()
+{
+ GLuint handle = mTransformFeedbackNameSpace.allocate();
+
+ mTransformFeedbackMap[handle] = NULL;
+
+ return handle;
+}
+
+// Returns an unused sampler name
+GLuint Context::createSampler()
+{
+ GLuint handle = mSamplerNameSpace.allocate();
+
+ mSamplerMap[handle] = NULL;
+
+ return handle;
+}
+
void Context::deleteBuffer(GLuint buffer)
{
if(mResourceManager->getBuffer(buffer))
@@ -909,6 +945,57 @@
}
}
+void Context::deleteVertexArray(GLuint vertexArray)
+{
+ VertexArrayMap::iterator vertexArrayObject = mVertexArrayMap.find(vertexArray);
+
+ if(vertexArrayObject != mVertexArrayMap.end())
+ {
+ mVertexArrayNameSpace.release(vertexArrayObject->first);
+
+ if(vertexArrayObject->second)
+ {
+ vertexArrayObject->second->release();
+ }
+
+ mVertexArrayMap.erase(vertexArrayObject);
+ }
+}
+
+void Context::deleteTransformFeedback(GLuint transformFeedback)
+{
+ TransformFeedbackMap::iterator transformFeedbackObject = mTransformFeedbackMap.find(transformFeedback);
+
+ if(transformFeedbackObject != mTransformFeedbackMap.end())
+ {
+ mTransformFeedbackNameSpace.release(transformFeedbackObject->first);
+
+ if(transformFeedbackObject->second)
+ {
+ transformFeedbackObject->second->release();
+ }
+
+ mTransformFeedbackMap.erase(transformFeedbackObject);
+ }
+}
+
+void Context::deleteSampler(GLuint sampler)
+{
+ SamplerMap::iterator samplerObject = mSamplerMap.find(sampler);
+
+ if(samplerObject != mSamplerMap.end())
+ {
+ mSamplerNameSpace.release(samplerObject->first);
+
+ if(samplerObject->second)
+ {
+ samplerObject->second->release();
+ }
+
+ mSamplerMap.erase(samplerObject);
+ }
+}
+
Buffer *Context::getBuffer(GLuint handle)
{
return mResourceManager->getBuffer(handle);
@@ -1011,6 +1098,43 @@
mState.renderbuffer = getRenderbuffer(renderbuffer);
}
+bool Context::bindVertexArray(GLuint array)
+{
+ VertexArray* vertexArray = getVertexArray(array);
+
+ if(vertexArray)
+ {
+ mState.vertexArray = vertexArray;
+ }
+
+ return !!vertexArray;
+}
+
+bool Context::bindTransformFeedback(GLuint id)
+{
+ TransformFeedback* transformFeedback = getTransformFeedback(id);
+
+ if(transformFeedback)
+ {
+ mState.transformFeedback = transformFeedback;
+ return true;
+ }
+
+ return false;
+}
+
+bool Context::bindSampler(GLuint unit, GLuint sampler)
+{
+ Sampler* samplerObject = getSampler(sampler);
+
+ if(sampler)
+ {
+ mState.sampler[unit] = samplerObject;
+ }
+
+ return !!samplerObject;
+}
+
void Context::useProgram(GLuint program)
{
GLuint priorProgram = mState.currentProgram;
@@ -1180,6 +1304,27 @@
}
}
+VertexArray *Context::getVertexArray(GLuint array)
+{
+ VertexArrayMap::iterator vertexArray = mVertexArrayMap.find(array);
+
+ return (vertexArray == mVertexArrayMap.end()) ? NULL : vertexArray->second;
+}
+
+TransformFeedback *Context::getTransformFeedback(GLuint transformFeedback)
+{
+ TransformFeedbackMap::iterator transformFeedbackObject = mTransformFeedbackMap.find(transformFeedback);
+
+ return (transformFeedbackObject == mTransformFeedbackMap.end()) ? NULL : transformFeedbackObject->second;
+}
+
+Sampler *Context::getSampler(GLuint sampler)
+{
+ SamplerMap::iterator samplerObject = mSamplerMap.find(sampler);
+
+ return (samplerObject == mSamplerMap.end()) ? NULL : samplerObject->second;
+}
+
Buffer *Context::getArrayBuffer()
{
return mState.arrayBuffer;
@@ -1258,6 +1403,20 @@
case GL_DITHER: *params = mState.dither; break;
case GL_PRIMITIVE_RESTART_FIXED_INDEX: *params = mState.primitiveRestartFixedIndex; break;
case GL_RASTERIZER_DISCARD: *params = mState.rasterizerDiscard; break;
+ case GL_TRANSFORM_FEEDBACK_ACTIVE:
+ if(mState.transformFeedback)
+ {
+ *params = mState.transformFeedback->isActive();
+ break;
+ }
+ else return false;
+ case GL_TRANSFORM_FEEDBACK_PAUSED:
+ if(mState.transformFeedback)
+ {
+ *params = mState.transformFeedback->isPaused();
+ break;
+ }
+ else return false;
default:
return false;
}
@@ -1780,17 +1939,33 @@
*param = 0;
break;
case GL_TRANSFORM_FEEDBACK_ACTIVE: // boolean, initially GL_FALSE
- *param = GL_FALSE;
- break;
+ if(mState.transformFeedback)
+ {
+ *param = mState.transformFeedback->isActive();
+ break;
+ }
+ else return false;
case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING: // name, initially 0
- *param = 0;
- break;
+ if(mState.transformFeedback && mState.transformFeedback->getGenericBuffer())
+ {
+ *param = mState.transformFeedback->getGenericBuffer()->name;
+ break;
+ }
+ else return false;
case GL_TRANSFORM_FEEDBACK_PAUSED: // boolean, initially GL_FALSE
- *param = GL_FALSE;
- break;
+ if(mState.transformFeedback)
+ {
+ *param = mState.transformFeedback->isPaused();
+ break;
+ }
+ else return false;
case GL_TRANSFORM_FEEDBACK_BUFFER_SIZE: // indexed[n] 64-bit integer, initially 0
- *param = 0;
- break;
+ if(mState.transformFeedback && mState.transformFeedback->getGenericBuffer())
+ {
+ *param = mState.transformFeedback->getGenericBuffer()->size();
+ break;
+ }
+ else return false;
case GL_TRANSFORM_FEEDBACK_BUFFER_START: // indexed[n] 64-bit integer, initially 0
*param = 0;
break;
diff --git a/src/OpenGL/libGLESv2/Context.h b/src/OpenGL/libGLESv2/Context.h
index e6cefb1..833315a 100644
--- a/src/OpenGL/libGLESv2/Context.h
+++ b/src/OpenGL/libGLESv2/Context.h
@@ -21,6 +21,7 @@
#include "common/Object.hpp"
#include "Image.hpp"
#include "Renderer/Sampler.hpp"
+#include "TransformFeedback.h"
#define GL_APICALL
#include <GLES2/gl2.h>
@@ -65,6 +66,8 @@
class IndexDataManager;
class Fence;
class Query;
+class Sampler;
+class VertexArray;
enum
{
@@ -254,6 +257,9 @@
GLuint drawFramebuffer;
gl::BindingPointer<Renderbuffer> renderbuffer;
GLuint currentProgram;
+ gl::BindingPointer<VertexArray> vertexArray;
+ gl::BindingPointer<TransformFeedback> transformFeedback;
+ gl::BindingPointer<Sampler> sampler[MAX_COMBINED_TEXTURE_IMAGE_UNITS];
VertexAttribute vertexAttribute[MAX_VERTEX_ATTRIBS];
gl::BindingPointer<Texture> samplerTexture[TEXTURE_TYPE_COUNT][MAX_COMBINED_TEXTURE_IMAGE_UNITS];
@@ -387,6 +393,18 @@
GLuint createQuery();
void deleteQuery(GLuint query);
+ // Vertex arrays are owned by the Context
+ GLuint createVertexArray();
+ void deleteVertexArray(GLuint array);
+
+ // Transform feedbacks are owned by the Context
+ GLuint createTransformFeedback();
+ void deleteTransformFeedback(GLuint transformFeedback);
+
+ // Samplers are owned by the Context
+ GLuint createSampler();
+ void deleteSampler(GLuint sampler);
+
void bindArrayBuffer(GLuint buffer);
void bindElementArrayBuffer(GLuint buffer);
void bindTexture2D(GLuint texture);
@@ -396,6 +414,9 @@
void bindReadFramebuffer(GLuint framebuffer);
void bindDrawFramebuffer(GLuint framebuffer);
void bindRenderbuffer(GLuint renderbuffer);
+ bool bindVertexArray(GLuint array);
+ bool bindTransformFeedback(GLuint transformFeedback);
+ bool bindSampler(GLuint unit, GLuint sampler);
void useProgram(GLuint program);
void beginQuery(GLenum target, GLuint query);
@@ -415,6 +436,10 @@
Framebuffer *getFramebuffer(GLuint handle);
virtual Renderbuffer *getRenderbuffer(GLuint handle);
Query *getQuery(GLuint handle, bool create, GLenum type);
+ VertexArray *getVertexArray(GLuint array);
+ TransformFeedback *getTransformFeedback(GLuint transformFeedback);
+ TransformFeedback *getTransformFeedback();
+ Sampler *getSampler(GLuint sampler);
Buffer *getArrayBuffer();
Buffer *getElementArrayBuffer();
@@ -503,6 +528,18 @@
QueryMap mQueryMap;
gl::NameSpace mQueryNameSpace;
+ typedef std::map<GLint, VertexArray*> VertexArrayMap;
+ VertexArrayMap mVertexArrayMap;
+ gl::NameSpace mVertexArrayNameSpace;
+
+ typedef std::map<GLint, TransformFeedback*> TransformFeedbackMap;
+ TransformFeedbackMap mTransformFeedbackMap;
+ gl::NameSpace mTransformFeedbackNameSpace;
+
+ typedef std::map<GLint, Sampler*> SamplerMap;
+ SamplerMap mSamplerMap;
+ gl::NameSpace mSamplerNameSpace;
+
VertexDataManager *mVertexDataManager;
IndexDataManager *mIndexDataManager;
diff --git a/src/OpenGL/libGLESv2/Sampler.h b/src/OpenGL/libGLESv2/Sampler.h
new file mode 100644
index 0000000..e0b9502
--- /dev/null
+++ b/src/OpenGL/libGLESv2/Sampler.h
@@ -0,0 +1,59 @@
+// SwiftShader Software Renderer
+//
+// Copyright(c) 2015 Google Inc.
+//
+// All rights reserved. No part of this software may be copied, distributed, transmitted,
+// transcribed, stored in a retrieval system, translated into any human or computer
+// language by any means, or disclosed to third parties without the explicit written
+// agreement of Google Inc. Without such an agreement, no rights or licenses, express
+// or implied, including but not limited to any patent rights, are granted to you.
+//
+
+// Sampler.h: Defines the es2::Sampler class
+
+#ifndef LIBGLESV2_SAMPLER_H_
+#define LIBGLESV2_SAMPLER_H_
+
+#include "common/Object.hpp"
+#include "Renderer/Renderer.hpp"
+
+#define GL_APICALL
+#include <GLES2/gl2.h>
+
+namespace es2
+{
+
+class Sampler : public gl::Object
+{
+public:
+ Sampler(GLuint name) : Object(name)
+ {
+ mMinFilter = GL_NEAREST_MIPMAP_LINEAR;
+ mMagFilter = GL_LINEAR;
+
+ mWrapModeS = GL_REPEAT;
+ mWrapModeT = GL_REPEAT;
+ mWrapModeR = GL_REPEAT;
+
+ mMinLod = -1000.0f;
+ mMaxLod = 1000.0f;
+ mCompareMode = GL_NONE;
+ mCompareFunc = GL_LEQUAL;
+ }
+
+ GLenum mMinFilter;
+ GLenum mMagFilter;
+
+ GLenum mWrapModeS;
+ GLenum mWrapModeT;
+ GLenum mWrapModeR;
+
+ GLfloat mMinLod;
+ GLfloat mMaxLod;
+ GLenum mCompareMode;
+ GLenum mCompareFunc;
+};
+
+}
+
+#endif // LIBGLESV2_SAMPLER_H_
diff --git a/src/OpenGL/libGLESv2/Texture.h b/src/OpenGL/libGLESv2/Texture.h
index bb6b6b7..7a9a3b4 100644
--- a/src/OpenGL/libGLESv2/Texture.h
+++ b/src/OpenGL/libGLESv2/Texture.h
@@ -46,7 +46,7 @@
IMPLEMENTATION_MAX_SAMPLES = 4,
IMPLEMENTATION_MAX_COLOR_ATTACHMENTS = 8,
IMPLEMENTATION_MAX_DRAW_BUFFERS = 8,
- IMPLEMENTATION_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 4,
+ IMPLEMENTATION_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS,
IMPLEMENTATION_MAX_UNIFORM_BUFFER_BINDINGS = 36,
IMPLEMENTATION_UNIFORM_BUFFER_OFFSET_ALIGNMENT = 1,
};
diff --git a/src/OpenGL/libGLESv2/TransformFeedback.cpp b/src/OpenGL/libGLESv2/TransformFeedback.cpp
new file mode 100644
index 0000000..8c403dc
--- /dev/null
+++ b/src/OpenGL/libGLESv2/TransformFeedback.cpp
@@ -0,0 +1,85 @@
+// SwiftShader Software Renderer
+//
+// Copyright(c) 2015 Google Inc.
+//
+// All rights reserved. No part of this software may be copied, distributed, transmitted,
+// transcribed, stored in a retrieval system, translated into any human or computer
+// language by any means, or disclosed to third parties without the explicit written
+// agreement of Google Inc. Without such an agreement, no rights or licenses, express
+// or implied, including but not limited to any patent rights, are granted to you.
+//
+
+// TransformFeedback.cpp: Implements the es2::TransformFeedback class
+
+#include "TransformFeedback.h"
+
+#include "Buffer.h"
+
+namespace es2
+{
+
+TransformFeedback::TransformFeedback(GLuint name) : Object(name), mActive(false), mPaused(false)
+{
+ mGenericBuffer = NULL;
+}
+
+Buffer* TransformFeedback::getGenericBuffer() const
+{
+ return mGenericBuffer;
+}
+
+Buffer* TransformFeedback::getBuffer(GLuint index) const
+{
+ return mBuffer[index];
+}
+
+bool TransformFeedback::isActive() const
+{
+ return mActive;
+}
+
+bool TransformFeedback::isPaused() const
+{
+ return mPaused;
+}
+
+GLenum TransformFeedback::primitiveMode() const
+{
+ return mPrimitiveMode;
+}
+
+void TransformFeedback::begin(GLenum primitiveMode)
+{
+ mActive = true; mPrimitiveMode = primitiveMode;
+}
+
+void TransformFeedback::end()
+{
+ mActive = false;
+}
+
+void TransformFeedback::setPaused(bool paused)
+{
+ mPaused = paused;
+}
+
+void TransformFeedback::setGenericBuffer(Buffer* buffer)
+{
+ mGenericBuffer = buffer;
+}
+
+void TransformFeedback::setBuffer(GLuint index, Buffer* buffer)
+{
+ mBuffer[index] = buffer;
+}
+
+void TransformFeedback::setBuffer(GLuint index, Buffer* buffer, GLintptr offset, GLsizeiptr size)
+{
+ mBuffer[index] = buffer;
+ if(buffer)
+ {
+ buffer->mapRange(offset, size, buffer->access());
+ }
+}
+
+}
diff --git a/src/OpenGL/libGLESv2/TransformFeedback.h b/src/OpenGL/libGLESv2/TransformFeedback.h
new file mode 100644
index 0000000..52a1bfe
--- /dev/null
+++ b/src/OpenGL/libGLESv2/TransformFeedback.h
@@ -0,0 +1,57 @@
+// SwiftShader Software Renderer
+//
+// Copyright(c) 2015 Google Inc.
+//
+// All rights reserved. No part of this software may be copied, distributed, transmitted,
+// transcribed, stored in a retrieval system, translated into any human or computer
+// language by any means, or disclosed to third parties without the explicit written
+// agreement of Google Inc. Without such an agreement, no rights or licenses, express
+// or implied, including but not limited to any patent rights, are granted to you.
+//
+
+// TransformFeedback.h: Defines the es2::TransformFeedback class
+
+#ifndef LIBGLESV2_TRANSFORM_FEEDBACK_H_
+#define LIBGLESV2_TRANSFORM_FEEDBACK_H_
+
+#include "common/Object.hpp"
+#include "Renderer/Renderer.hpp"
+
+#define GL_APICALL
+#include <GLES2/gl2.h>
+
+namespace es2
+{
+class Buffer;
+
+class TransformFeedback : public gl::Object
+{
+public:
+ // FIXME: Change this when implementing transform feedback
+ TransformFeedback(GLuint name);
+
+ Buffer* getGenericBuffer() const;
+ Buffer* getBuffer(GLuint index) const;
+ bool isActive() const;
+ bool isPaused() const;
+ GLenum primitiveMode() const;
+
+ void setGenericBuffer(Buffer* buffer);
+ void setBuffer(GLuint index, Buffer* buffer);
+ void setBuffer(GLuint index, Buffer* buffer, GLintptr offset, GLsizeiptr size);
+ void begin(GLenum primitiveMode);
+ void end();
+ void setPaused(bool paused);
+
+private:
+ gl::BindingPointer<Buffer> mGenericBuffer;
+ gl::BindingPointer<Buffer> mBuffer[MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS];
+
+ bool mActive;
+ bool mPaused;
+ GLenum mPrimitiveMode;
+};
+
+}
+
+#endif // LIBGLESV2_TRANSFORM_FEEDBACK_H_
diff --git a/src/OpenGL/libGLESv2/VertexArray.h b/src/OpenGL/libGLESv2/VertexArray.h
new file mode 100644
index 0000000..c3c2b87
--- /dev/null
+++ b/src/OpenGL/libGLESv2/VertexArray.h
@@ -0,0 +1,32 @@
+// SwiftShader Software Renderer
+//
+// Copyright(c) 2015 Google Inc.
+//
+// All rights reserved. No part of this software may be copied, distributed, transmitted,
+// transcribed, stored in a retrieval system, translated into any human or computer
+// language by any means, or disclosed to third parties without the explicit written
+// agreement of Google Inc. Without such an agreement, no rights or licenses, express
+// or implied, including but not limited to any patent rights, are granted to you.
+//
+
+// VertexArray.h: Defines the es2::VertexArray class
+
+#ifndef LIBGLESV2_VERTEX_ARRAY_H_
+#define LIBGLESV2_VERTEX_ARRAY_H_
+
+#include "common/Object.hpp"
+#include "Renderer/Renderer.hpp"
+
+#define GL_APICALL
+#include <GLES2/gl2.h>
+
+namespace es2
+{
+
+class VertexArray : public gl::Object
+{
+};
+
+}
+
+#endif // LIBGLESV2_VERTEX_ARRAY_H_
diff --git a/src/OpenGL/libGLESv2/libGLESv2.cbp b/src/OpenGL/libGLESv2/libGLESv2.cbp
index 83585ab..6f08551 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.cbp
+++ b/src/OpenGL/libGLESv2/libGLESv2.cbp
@@ -358,10 +358,14 @@
<Unit filename="Renderbuffer.h" />
<Unit filename="ResourceManager.cpp" />
<Unit filename="ResourceManager.h" />
+ <Unit filename="Sampler.h" />
<Unit filename="Shader.cpp" />
<Unit filename="Shader.h" />
<Unit filename="Texture.cpp" />
<Unit filename="Texture.h" />
+ <Unit filename="TransformFeedback.cpp" />
+ <Unit filename="TransformFeedback.h" />
+ <Unit filename="VertexArray.h" />
<Unit filename="VertexDataManager.cpp" />
<Unit filename="VertexDataManager.h" />
<Unit filename="exports.map" />
diff --git a/src/OpenGL/libGLESv2/libGLESv2.vcxproj b/src/OpenGL/libGLESv2/libGLESv2.vcxproj
index 63eb632..f47b891 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.vcxproj
+++ b/src/OpenGL/libGLESv2/libGLESv2.vcxproj
@@ -337,6 +337,7 @@
<ClCompile Include="ResourceManager.cpp" />
<ClCompile Include="Shader.cpp" />
<ClCompile Include="Texture.cpp" />
+ <ClCompile Include="TransformFeedback.cpp" />
<ClCompile Include="utilities.cpp" />
<ClCompile Include="VertexDataManager.cpp" />
</ItemGroup>
@@ -361,9 +362,12 @@
<ClInclude Include="Renderbuffer.h" />
<ClInclude Include="resource.h" />
<ClInclude Include="ResourceManager.h" />
+ <ClInclude Include="Sampler.h" />
<ClInclude Include="Shader.h" />
<ClInclude Include="Texture.h" />
+ <ClInclude Include="TransformFeedback.h" />
<ClInclude Include="utilities.h" />
+ <ClInclude Include="VertexArray.h" />
<ClInclude Include="VertexDataManager.h" />
</ItemGroup>
<ItemGroup>
diff --git a/src/OpenGL/libGLESv2/libGLESv2.vcxproj.filters b/src/OpenGL/libGLESv2/libGLESv2.vcxproj.filters
index ea77fb1..683b67a 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.vcxproj.filters
+++ b/src/OpenGL/libGLESv2/libGLESv2.vcxproj.filters
@@ -74,6 +74,9 @@
<ClCompile Include="libGLESv3.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="TransformFeedback.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="Buffer.h">
@@ -148,6 +151,15 @@
<ClInclude Include="..\common\NameSpace.hpp">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="Sampler.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="TransformFeedback.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="VertexArray.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="libGLESv2.rc" />