blob: 8a79cac3abdfa13d586923bdc5f130f568474b5d [file] [log] [blame]
#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;
}
}