Можно ли рендерить в RGB888 с OpenGL? - PullRequest
3 голосов
/ 14 апреля 2011

Я играл некоторое время с OpenGL на Android на разных устройствах.И если я не ошибаюсь, рендеринг по умолчанию всегда выполняется в пиксельном формате RGB565.

Однако я бы хотел рендерить более точные цвета, используя RGB888.

GLSurfaceView документация упоминает два метода, которые относятся к форматам пикселей:

Если я не ошибаюсь, я думаю, что мне нужно использовать только позже,Или здесь используется SurfaceHolder.setFormat()?

В документации класса EGLConfigChooser упоминается EGL10.eglChooseConfig () , чтобы узнать, какие конфигурации доступны.

В моем случае можно вернуться к RGB565, если RGB888 недоступен, но я бы предпочел, чтобы это было довольно редко.

Итак, возможно ли использовать RGB888 на большинстве устройств?

Есть ли проблемы с совместимостью или странные ошибки с этим?

У вас есть пример правильного и надежного способа настройки GLSurfaceView для рендеринга RGB888?

Ответы [ 2 ]

10 голосов
/ 16 апреля 2011

На новых устройствах большинство из них должно поддерживать RGBA8888 как собственный формат. Одним из способов принудительного использования цветового формата RGBA является установка прозрачности поверхности. Вы все равно хотите выбрать EGLConfig, чтобы лучше угадать конфигурацию для каналов в дополнение к буферам глубины и трафарета.

setEGLConfigChooser(8, 8, 8, 8, 0, 0);
getHolder().setFormat(PixelFormat.RGBA_8888); 

Однако, если я правильно прочитал ваш вопрос, вы запрашиваете поддержку RGB888 (альфа не волнует), другими словами, RGBX8888, которая может поддерживаться не всеми устройствами (ограничение поставщика драйверов).

Что следует помнить о производительности, поскольку RGBA8888 - это цветной формат, изначально поддерживаемый большинством аппаратных средств графических процессоров, поэтому лучше избегать любых других цветовых форматов (не поддерживаемых изначально), поскольку это обычно приводит к преобразованию цветов, добавляя ненужную работу. загрузить в графический процессор.

0 голосов
/ 06 июля 2012

Вот как я это делаю;

{
window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

// cocos2d will inherit these values
[window setUserInteractionEnabled:YES]; 
[window setMultipleTouchEnabled:NO];

// must be called before any othe call to the director
[Director useFastDirector];
[[Director sharedDirector] setDisplayFPS:YES];

// create an openGL view inside a window
[[Director sharedDirector] attachInView:window];

// Default texture format for PNG/BMP/TIFF/JPEG/GIF images
// It can be RGBA8888, RGBA4444, RGB5_A1, RGB565
// You can change anytime.
[Texture2D setDefaultAlphaPixelFormat:kTexture2DPixelFormat_];  

glClearColor(0.7f,0.7f,0.6f,1.0f);
//glClearColor(1.0f,1.0f,1.0f,1.0f);

[window makeKeyAndVisible];

[[Director sharedDirector] runWithScene:[GameLayer node]];

}

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...