Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1138)

Unified Diff: gpu/command_buffer/service/texture_manager.cc

Issue 7458008: Support GL_OES_EGL_image_external (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Created 9 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 596c1098a9da2a2330d005ee586a9c7e6d419344..bb83d48bfa1bed7b672c0312bb6ee20b44f085ff 100644
--- a/gpu/command_buffer/service/texture_manager.cc
+++ b/gpu/command_buffer/service/texture_manager.cc
@@ -20,6 +20,7 @@ static GLsizei ComputeMipMapCount(
static size_t GLTargetToFaceIndex(GLenum target) {
switch (target) {
case GL_TEXTURE_2D:
+ case GL_TEXTURE_EXTERNAL_OES:
return 0;
case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
return 0;
@@ -142,7 +143,8 @@ bool TextureManager::TextureInfo::MarkMipmapsGenerated(
bool TextureManager::TextureInfo::CanGenerateMipmaps(
const FeatureInfo* feature_info) const {
if ((npot() && !feature_info->feature_flags().npot_ok) ||
- level_infos_.empty() || IsDeleted()) {
+ level_infos_.empty() || IsDeleted() ||
+ target_ == GL_TEXTURE_EXTERNAL_OES) {
return false;
}
const TextureInfo::LevelInfo& first = level_infos_[0][0];
@@ -259,6 +261,16 @@ bool TextureManager::TextureInfo::GetLevelType(
bool TextureManager::TextureInfo::SetParameter(
const FeatureInfo* feature_info, GLenum pname, GLint param) {
DCHECK(feature_info);
+
+ if (target_ == GL_TEXTURE_EXTERNAL_OES) {
+ if (pname == GL_TEXTURE_MIN_FILTER &&
+ (param != GL_NEAREST && param != GL_LINEAR))
+ return false;
+ if ((pname == GL_TEXTURE_WRAP_S || pname == GL_TEXTURE_WRAP_T) &&
+ param != GL_CLAMP_TO_EDGE)
+ return false;
+ }
+
switch (pname) {
case GL_TEXTURE_MIN_FILTER:
if (!feature_info->validators()->texture_min_filter_mode.IsValid(param)) {
@@ -391,7 +403,7 @@ TextureManager::TextureManager(
black_cube_texture_id_(0) {
}
-bool TextureManager::Initialize() {
+bool TextureManager::Initialize(const FeatureInfo* feature_info) {
// TODO(gman): The default textures have to be real textures, not the 0
// texture because we simulate non shared resources on top of shared
// resources and all contexts that share resource share the same default
@@ -430,6 +442,31 @@ bool TextureManager::Initialize() {
black_2d_texture_id_ = ids[0];
black_cube_texture_id_ = ids[2];
+ if (feature_info->feature_flags().oes_egl_image_external) {
+ GLuint external_ids[2];
+ glGenTextures(arraysize(external_ids), external_ids);
+ glBindTexture(GL_TEXTURE_EXTERNAL_OES, 0);
+ default_texture_external_oes_ = TextureInfo::Ref(
+ new TextureInfo(external_ids[0]));
+ SetInfoTarget(default_texture_external_oes_, GL_TEXTURE_EXTERNAL_OES);
+ default_texture_external_oes_->SetLevelInfo(
+ &temp_feature_info, GL_TEXTURE_EXTERNAL_OES, 0,
+ GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE);
+ default_texture_external_oes_->SetParameter(feature_info,
+ GL_TEXTURE_MIN_FILTER,
+ GL_LINEAR);
+ default_texture_external_oes_->SetParameter(feature_info,
+ GL_TEXTURE_WRAP_S,
+ GL_CLAMP_TO_EDGE);
+ default_texture_external_oes_->SetParameter(feature_info,
+ GL_TEXTURE_WRAP_T,
+ GL_CLAMP_TO_EDGE);
+
+ // Sampling a texture not associated with any EGLImage sibling will return
+ // black values according to the spec.
+ black_oes_external_texture_id_ = external_ids[1];
+ }
+
return true;
}

Powered by Google App Engine
This is Rietveld 408576698