| #include <system/window.h> |
| #include "GL/glcorearb.h" |
| #include "GL/glext.h" |
| #include "EGL/egl.h" |
| |
| #define GL_RGB565_OES 0x8D62 |
| |
| #include "AndroidCommon.hpp" |
| |
| #include "../../Common/DebugAndroid.hpp" |
| #include "../../Common/GrallocAndroid.hpp" |
| |
| GLenum getColorFormatFromAndroid(int format) |
| { |
| switch(format) |
| { |
| case HAL_PIXEL_FORMAT_RGBA_8888: |
| return GL_RGBA; |
| case HAL_PIXEL_FORMAT_RGBX_8888: |
| return GL_RGB; |
| case HAL_PIXEL_FORMAT_RGB_888: |
| return GL_RGB; |
| case HAL_PIXEL_FORMAT_BGRA_8888: |
| return GL_BGRA_EXT; |
| case HAL_PIXEL_FORMAT_RGB_565: |
| #if LATER |
| if (GrallocModule::getInstance()->supportsConversion()) { |
| return GL_RGB565_OES; |
| } else { |
| ALOGE("%s badness converting gralloc not supported for RGB_565", |
| __FUNCTION__); |
| return GL_RGB565_OES; |
| } |
| #else |
| return GL_RGB565_OES; |
| #endif |
| case HAL_PIXEL_FORMAT_YV12: |
| case HAL_PIXEL_FORMAT_BLOB: |
| case HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED: |
| default: |
| ALOGE("%s badness unsupported format=%x", __FUNCTION__, format); |
| } |
| return GL_RGBA; |
| } |
| |
| // Used internally |
| GLenum getPixelFormatFromAndroid(int format) |
| { |
| switch(format) |
| { |
| case HAL_PIXEL_FORMAT_RGBA_8888: |
| case HAL_PIXEL_FORMAT_RGBX_8888: |
| case HAL_PIXEL_FORMAT_RGB_888: |
| case HAL_PIXEL_FORMAT_BGRA_8888: |
| return GL_UNSIGNED_BYTE; |
| case HAL_PIXEL_FORMAT_RGB_565: |
| #if LATER |
| if (GrallocModule::getInstance()->supportsConversion()) { |
| return GL_UNSIGNED_SHORT_5_6_5; |
| } else { |
| ALOGE("%s badness converting gralloc not supported for RGB_565", |
| __FUNCTION__); |
| return GL_UNSIGNED_SHORT_5_6_5; |
| } |
| #else |
| return GL_UNSIGNED_SHORT_5_6_5; |
| #endif |
| case HAL_PIXEL_FORMAT_YV12: |
| case HAL_PIXEL_FORMAT_BLOB: |
| case HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED: |
| default: |
| ALOGE("%s badness unsupported format=%x", __FUNCTION__, format); |
| } |
| return GL_UNSIGNED_BYTE; |
| } |
| |
| // Used in V1 & V2 Context.cpp |
| GLenum isSupportedAndroidBuffer(GLuint name) |
| { |
| ANativeWindowBuffer *nativeBuffer = reinterpret_cast<ANativeWindowBuffer*>(name); |
| |
| if (!name) |
| { |
| ALOGE("badness %s called with name==NULL %s:%d", __FUNCTION__, __FILE__, __LINE__); |
| return EGL_BAD_PARAMETER; |
| } |
| if (nativeBuffer->common.magic != ANDROID_NATIVE_BUFFER_MAGIC) |
| { |
| ALOGE("badness %s failed: bad magic=%x, expected=%x", |
| __FUNCTION__, nativeBuffer->common.magic, ANDROID_NATIVE_BUFFER_MAGIC); |
| return EGL_BAD_PARAMETER; |
| } |
| |
| if (nativeBuffer->common.version != sizeof(ANativeWindowBuffer)) |
| { |
| ALOGE("badness %s failed: bad size=%d, expected=%d", |
| __FUNCTION__, nativeBuffer->common.version, sizeof(ANativeWindowBuffer)); |
| return EGL_BAD_PARAMETER; |
| } |
| |
| switch(nativeBuffer->format) |
| { |
| case HAL_PIXEL_FORMAT_RGBA_8888: |
| case HAL_PIXEL_FORMAT_RGBX_8888: |
| return EGL_SUCCESS; |
| case HAL_PIXEL_FORMAT_RGB_565: |
| #if LATER |
| if (GrallocModule::getInstance()->supportsConversion()) { |
| return EGL_SUCCESS; |
| } else { |
| ALOGE("badness %s failed: conversion not supported", __FUNCTION__ ); |
| return EGL_BAD_PARAMETER; |
| } |
| #else |
| return EGL_SUCCESS; |
| #endif |
| default: |
| ALOGE("badness %s failed: bad format=%x", __FUNCTION__, nativeBuffer->format); |
| return EGL_BAD_PARAMETER; |
| } |
| } |