Index: gpu/command_buffer/service/texture_manager.cc |
diff --git a/gpu/command_buffer/service/texture_manager.cc b/gpu/command_buffer/service/texture_manager.cc |
index e090e0bb7b0bec779c39969e406765f6e22dcc65..09752586488365f55405dfe553d2092d524415db 100644 |
--- a/gpu/command_buffer/service/texture_manager.cc |
+++ b/gpu/command_buffer/service/texture_manager.cc |
@@ -570,7 +570,7 @@ bool Texture::GetLevelType( |
return false; |
} |
-GLenum Texture::SetParameter( |
+GLenum Texture::SetParameteri( |
const FeatureInfo* feature_info, GLenum pname, GLint param) { |
DCHECK(feature_info); |
@@ -638,6 +638,31 @@ GLenum Texture::SetParameter( |
return GL_NO_ERROR; |
} |
+GLenum Texture::SetParameterf( |
+ const FeatureInfo* feature_info, GLenum pname, GLfloat param) { |
+ switch (pname) { |
+ case GL_TEXTURE_MIN_FILTER: |
+ case GL_TEXTURE_MAG_FILTER: |
+ case GL_TEXTURE_POOL_CHROMIUM: |
+ case GL_TEXTURE_WRAP_S: |
+ case GL_TEXTURE_WRAP_T: |
+ case GL_TEXTURE_USAGE_ANGLE: |
+ { |
+ GLint iparam = static_cast<GLint>(param); |
+ return SetParameteri(feature_info, pname, iparam); |
+ } |
+ case GL_TEXTURE_MAX_ANISOTROPY_EXT: |
+ if (param < 1.f) { |
+ return GL_INVALID_VALUE; |
+ } |
+ break; |
+ default: |
+ NOTREACHED(); |
+ return GL_INVALID_ENUM; |
+ } |
+ return GL_NO_ERROR; |
+} |
+ |
void Texture::Update(const FeatureInfo* feature_info) { |
// Update npot status. |
// Assume GL_TEXTURE_EXTERNAL_OES textures are npot, all others |
@@ -1081,20 +1106,20 @@ TextureRef* TextureManager::Consume( |
return ref.get(); |
} |
-void TextureManager::SetParameter( |
+void TextureManager::SetParameteri( |
const char* function_name, ErrorState* error_state, |
TextureRef* ref, GLenum pname, GLint param) { |
DCHECK(error_state); |
DCHECK(ref); |
Texture* texture = ref->texture(); |
- GLenum result = texture->SetParameter(feature_info_.get(), pname, param); |
+ GLenum result = texture->SetParameteri(feature_info_.get(), pname, param); |
if (result != GL_NO_ERROR) { |
if (result == GL_INVALID_ENUM) { |
ERRORSTATE_SET_GL_ERROR_INVALID_ENUM( |
error_state, function_name, param, "param"); |
} else { |
- ERRORSTATE_SET_GL_ERROR_INVALID_PARAM( |
- error_state, result, function_name, pname, static_cast<GLint>(param)); |
+ ERRORSTATE_SET_GL_ERROR_INVALID_PARAMI( |
+ error_state, result, function_name, pname, param); |
} |
} else { |
// Texture tracking pools exist only for the command decoder, so |
@@ -1105,6 +1130,30 @@ void TextureManager::SetParameter( |
} |
} |
+void TextureManager::SetParameterf( |
+ const char* function_name, ErrorState* error_state, |
+ TextureRef* ref, GLenum pname, GLfloat param) { |
+ DCHECK(error_state); |
+ DCHECK(ref); |
+ Texture* texture = ref->texture(); |
+ GLenum result = texture->SetParameterf(feature_info_.get(), pname, param); |
+ if (result != GL_NO_ERROR) { |
+ if (result == GL_INVALID_ENUM) { |
+ ERRORSTATE_SET_GL_ERROR_INVALID_ENUM( |
+ error_state, function_name, param, "param"); |
+ } else { |
+ ERRORSTATE_SET_GL_ERROR_INVALID_PARAMF( |
+ error_state, result, function_name, pname, param); |
+ } |
+ } else { |
+ // Texture tracking pools exist only for the command decoder, so |
+ // do not pass them on to the native GL implementation. |
+ if (pname != GL_TEXTURE_POOL_CHROMIUM) { |
+ glTexParameterf(texture->target(), pname, param); |
+ } |
+ } |
+} |
+ |
bool TextureManager::MarkMipmapsGenerated(TextureRef* ref) { |
DCHECK(ref); |
Texture* texture = ref->texture(); |