Commit 67e04be1 by Geoff Lang

Enable point sprites in StateManagerGL.

Fixes: * conformance/rendering/point-size.html * conformance/rendering/point-with-gl-pointcoord-in-fragment-shader.html * PointSpritesTest * particle_system sample BUG=angleproject:883 Change-Id: Idb3352fa916cf08817496f0a8425c95ece9bfa49 Reviewed-on: https://chromium-review.googlesource.com/275860Reviewed-by: 's avatarZhenyao Mo <zmo@chromium.org> Tested-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent 3f3d75ea
...@@ -773,12 +773,12 @@ void FunctionsGL::initialize() ...@@ -773,12 +773,12 @@ void FunctionsGL::initialize()
{ {
// Grab the version number // Grab the version number
AssignGLEntryPoint(loadProcAddress("glGetString"), &getString); AssignGLEntryPoint(loadProcAddress("glGetString"), &getString);
AssignGLEntryPoint(loadProcAddress("glGetIntegerv"), &getIntegerv);
GetGLVersion(getString, &version, &standard); GetGLVersion(getString, &version, &standard);
// Grab the GL extensions // Grab the GL extensions
if (isAtLeastGL(gl::Version(3, 0))) if (isAtLeastGL(gl::Version(3, 0)))
{ {
AssignGLEntryPoint(loadProcAddress("glGetIntegerv"), &getIntegerv);
AssignGLEntryPoint(loadProcAddress("glGetStringi"), &getStringi); AssignGLEntryPoint(loadProcAddress("glGetStringi"), &getStringi);
extensions = GetIndexedExtensions(getIntegerv, getStringi); extensions = GetIndexedExtensions(getIntegerv, getStringi);
} }
...@@ -788,6 +788,16 @@ void FunctionsGL::initialize() ...@@ -788,6 +788,16 @@ void FunctionsGL::initialize()
angle::SplitStringAlongWhitespace(std::string(exts), &extensions); angle::SplitStringAlongWhitespace(std::string(exts), &extensions);
} }
// Check the context profile
if (isAtLeastGL(gl::Version(3, 2)))
{
getIntegerv(GL_CONTEXT_PROFILE_MASK, &profile);
}
else
{
profile = 0;
}
// 1.0 // 1.0
if (isAtLeastGL(gl::Version(1, 0))) if (isAtLeastGL(gl::Version(1, 0)))
{ {
...@@ -811,8 +821,6 @@ void FunctionsGL::initialize() ...@@ -811,8 +821,6 @@ void FunctionsGL::initialize()
AssignGLEntryPoint(loadProcAddress("glGetDoublev"), &getDoublev); AssignGLEntryPoint(loadProcAddress("glGetDoublev"), &getDoublev);
AssignGLEntryPoint(loadProcAddress("glGetError"), &getError); AssignGLEntryPoint(loadProcAddress("glGetError"), &getError);
AssignGLEntryPoint(loadProcAddress("glGetFloatv"), &getFloatv); AssignGLEntryPoint(loadProcAddress("glGetFloatv"), &getFloatv);
AssignGLEntryPoint(loadProcAddress("glGetIntegerv"), &getIntegerv);
AssignGLEntryPoint(loadProcAddress("glGetString"), &getString);
AssignGLEntryPoint(loadProcAddress("glGetTexImage"), &getTexImage); AssignGLEntryPoint(loadProcAddress("glGetTexImage"), &getTexImage);
AssignGLEntryPoint(loadProcAddress("glGetTexLevelParameterfv"), &getTexLevelParameterfv); AssignGLEntryPoint(loadProcAddress("glGetTexLevelParameterfv"), &getTexLevelParameterfv);
AssignGLEntryPoint(loadProcAddress("glGetTexLevelParameteriv"), &getTexLevelParameteriv); AssignGLEntryPoint(loadProcAddress("glGetTexLevelParameteriv"), &getTexLevelParameteriv);
......
...@@ -34,6 +34,7 @@ class FunctionsGL ...@@ -34,6 +34,7 @@ class FunctionsGL
// Version information // Version information
gl::Version version; gl::Version version;
StandardGL standard; StandardGL standard;
GLint profile;
bool isAtLeastGL(const gl::Version &glVersion) const; bool isAtLeastGL(const gl::Version &glVersion) const;
bool isAtLeastGLES(const gl::Version &glesVersion) const; bool isAtLeastGLES(const gl::Version &glesVersion) const;
......
...@@ -92,6 +92,19 @@ StateManagerGL::StateManagerGL(const FunctionsGL *functions, const gl::Caps &ren ...@@ -92,6 +92,19 @@ StateManagerGL::StateManagerGL(const FunctionsGL *functions, const gl::Caps &ren
mFramebuffers[GL_READ_FRAMEBUFFER] = 0; mFramebuffers[GL_READ_FRAMEBUFFER] = 0;
mFramebuffers[GL_DRAW_FRAMEBUFFER] = 0; mFramebuffers[GL_DRAW_FRAMEBUFFER] = 0;
// Initialize point sprite state for desktop GL
if (mFunctions->standard == STANDARD_GL_DESKTOP)
{
mFunctions->enable(GL_PROGRAM_POINT_SIZE);
// GL_POINT_SPRITE was deprecated in the core profile. Point rasterization is always performed
// as though POINT_SPRITE were enabled.
if (mFunctions->profile != GL_CONTEXT_CORE_PROFILE_BIT)
{
mFunctions->enable(GL_POINT_SPRITE);
}
}
} }
void StateManagerGL::deleteProgram(GLuint program) void StateManagerGL::deleteProgram(GLuint program)
......
...@@ -429,6 +429,7 @@ ...@@ -429,6 +429,7 @@
#define GL_MAX_VERTEX_ATTRIBS 0x8869 #define GL_MAX_VERTEX_ATTRIBS 0x8869
#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C #define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C
#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A #define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A
#define GL_POINT_SPRITE 0x8861
#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 #define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0
#define GL_SAMPLER_1D 0x8B5D #define GL_SAMPLER_1D 0x8B5D
#define GL_SAMPLER_1D_SHADOW 0x8B61 #define GL_SAMPLER_1D_SHADOW 0x8B61
......
...@@ -429,4 +429,4 @@ TEST_P(PointSpritesTest, PointSizeDeclaredButUnused) ...@@ -429,4 +429,4 @@ TEST_P(PointSpritesTest, PointSizeDeclaredButUnused)
// We test on D3D11 9_3 because the existing D3D11 PointSprite implementation // We test on D3D11 9_3 because the existing D3D11 PointSprite implementation
// uses Geometry Shaders which are not supported for 9_3. // uses Geometry Shaders which are not supported for 9_3.
// D3D9 and D3D11 are also tested to ensure no regressions. // D3D9 and D3D11 are also tested to ensure no regressions.
ANGLE_INSTANTIATE_TEST(PointSpritesTest, ES2_D3D9(), ES2_D3D11(), ES2_D3D11_FL9_3()); ANGLE_INSTANTIATE_TEST(PointSpritesTest, ES2_D3D9(), ES2_D3D11(), ES2_D3D11_FL9_3(), ES2_OPENGL(), ES3_OPENGL());
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment