summaryrefslogtreecommitdiffstats
path: root/gpu/command_buffer/service/texture_manager.cc
diff options
context:
space:
mode:
authorgman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-19 01:57:56 +0000
committergman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-19 01:57:56 +0000
commit57f2238364b33696c4ee2d294c51cc317edf0ec0 (patch)
tree31a2d0b9d23bdb5d29065cb520eb09171c6f4da7 /gpu/command_buffer/service/texture_manager.cc
parentaee541ebc97e1ff2c8bb43e4375913f582931d40 (diff)
downloadchromium_src-57f2238364b33696c4ee2d294c51cc317edf0ec0.zip
chromium_src-57f2238364b33696c4ee2d294c51cc317edf0ec0.tar.gz
chromium_src-57f2238364b33696c4ee2d294c51cc317edf0ec0.tar.bz2
Made glReadPixels handle out of range areas.
TEST=unit tests BUG=none Review URL: http://codereview.chromium.org/1081006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@42065 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu/command_buffer/service/texture_manager.cc')
-rw-r--r--gpu/command_buffer/service/texture_manager.cc15
1 files changed, 14 insertions, 1 deletions
diff --git a/gpu/command_buffer/service/texture_manager.cc b/gpu/command_buffer/service/texture_manager.cc
index a2f72bb..d6a1dce 100644
--- a/gpu/command_buffer/service/texture_manager.cc
+++ b/gpu/command_buffer/service/texture_manager.cc
@@ -108,7 +108,7 @@ bool TextureManager::TextureInfo::MarkMipmapsGenerated() {
}
bool TextureManager::TextureInfo::CanGenerateMipmaps() const {
- if (npot() || level_infos_.empty()) {
+ if (npot() || level_infos_.empty() || IsDeleted()) {
return false;
}
const TextureInfo::LevelInfo& first = level_infos_[0][0];
@@ -160,6 +160,19 @@ void TextureManager::TextureInfo::SetLevelInfo(
Update();
}
+bool TextureManager::TextureInfo::GetLevelSize(
+ GLint face, GLint level, GLsizei* width, GLsizei* height) const {
+ size_t face_index = GLTargetToFaceIndex(face);
+ if (!IsDeleted() && level >= 0 && face_index < level_infos_.size() &&
+ static_cast<size_t>(level) < level_infos_[face_index].size()) {
+ const LevelInfo& info = level_infos_[GLTargetToFaceIndex(face)][level];
+ *width = info.width;
+ *height = info.height;
+ return true;
+ }
+ return false;
+}
+
void TextureManager::TextureInfo::SetParameter(GLenum pname, GLint param) {
switch (pname) {
case GL_TEXTURE_MIN_FILTER: