Смешивание не работает одинаково на Desire HD и A500 Tab - PullRequest
2 голосов
/ 10 февраля 2012

Я делаю живые обои с использованием libgdx, а также gdxlw, который представляет собой небольшой фреймворк поверх libgdx для упрощения создания живых обоев с использованием OpenGL.

Прежде всего, я уверен, что яЯ не использую GL20.Я хотел бы попытаться придерживаться GL10 / GL11 в максимально возможной степени.Я использую простую OrthographicCamera.

То, что я делаю каждый вызов рендеринга:

1 ... Использование

gl11.glClearColor(1, 1, 1, 1);

gl11.glClear(GL11.GL_COLOR_BUFFER_BIT);

Я заполняю экран белым.

2 ... Я рисую, скажем, черный квадрат сверху, используя SpriteBatch и

batch.setBlendFunction(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);

3 ... Кроме того, я рисую большое (обычно масштабированное) изображение с помощью SpriteBatch и

batch.setBlendFunction(GL11.GL_DST_COLOR, GL11.GL_ONE_MINUS_DST_COLOR);

, который будет рисовать только то большое изображение, где оно уже черное, а не белое.Он работает так, как я ожидал, и идеально подходит для моего проекта.

Это прекрасно работает на моем HTC Desire HD (Android 2.3.5).Однако, когда я запускаю то же самое приложение на своем планшете Acer Iconia A500 (Android 3.2.1), большое изображение рисуется на черно-белом фоне без смешения.

Независимо от того, что я пыталсяизмените смешивание, чтобы при рисовании большого изображения результат всегда был одинаковым.Черный квадрат не виден, каким он и должен быть.Большое изображение просто сносится прямо над ним.

Что я могу делать не так?Могу ли я что-то упустить?

Интересно отметить, что я попытался нарисовать несколько случайных спрайтов поверх (после) большого изображения, нарисованного с различными смешиваниями, которые доказали, что различные виды смешивания вФакт, похоже, работает.Другими словами, смешивание не было полностью отключено.

При смешивании большие изображения ведут себя не так, как маленькие?

Еще одна интересная вещь, которую стоит отметить, это то, что при использованииЛинейная фильтрация на большом изображении, вы можете разглядеть черный квадрат очень слабо.Тем не менее, это не видно с ближайшей фильтрацией.

Пожалуйста, прости мои запутанные вопросы;единственное, что сейчас у меня на уме, это "почему это происходит?"и я весь день натягивал волосы и безуспешно пробовал много подходов.

Не совместимо ли libgdx с планшетами или Android 3+? Не могу найти ни одной ссылкик этому.

Является ли gdxlw виновником?

РЕДАКТИРОВАТЬ: я сделал несколько тестов и обнаружил, что если я изменю приложение наиспользуя GL20 вместо GL11, я получаю тот же результат на своем Desire HD, что и мой Acer Iconia A500.То есть я вижу свое большое изображение и крайне (!) Смутно вижу за ним черное.

Кроме того, я смотрю на свой logcat с запуска версии GL11 на Acer Iconia A500таблетки .В нем говорится, что ...

02-10 10:58:19.010: D/libEGL(9907): loaded /system/lib/egl/libGLES_android.so
02-10 10:58:19.020: D/libEGL(9907): loaded /system/lib/egl/libEGL_tegra.so
02-10 10:58:19.040: I/DEBUG(81): tid 9915 does not exist in pid 9893. ignoring debug request
02-10 10:58:19.040: D/libEGL(9907): loaded /system/lib/egl/libGLESv1_CM_tegra.so
02-10 10:58:19.040: D/libEGL(9907): loaded /system/lib/egl/libGLESv2_tegra.so
02-10 10:58:19.050: D/QuickLog(9907): checkGL20 is: true
02-10 10:58:19.080: D/HAL(9907): [HAL] hw_get_module:share library path:/system/lib/hw/gralloc.tegra.so
02-10 10:58:19.290: D/HAL(9907): [HAL] hw_get_module:share library path:/system/lib/hw/gralloc.tegra.so
02-10 10:58:19.290: D/AndroidGraphics(9907): GL20: true
02-10 10:58:19.300: D/AndroidGraphics(9907): OGL renderer: NVIDIA AP
02-10 10:58:19.300: D/AndroidGraphics(9907): OGL vendor: NVIDIA Corporation
02-10 10:58:19.300: D/AndroidGraphics(9907): OGL version: OpenGL ES-CM 1.1
02-10 10:58:19.300: D/AndroidGraphics(9907): OGL extensions: GL_EXT_bgra GL_EXT_texture_compression_dxt1 GL_EXT_texture_compression_s3tc GL_EXT_texture_format_BGRA8888 GL_NV_texture_npot_2D_mipmap GL_OES_byte_coordinates GL_OES_compressed_ETC1_RGB8_texture GL_OES_compressed_paletted_texture GL_OES_draw_texture GL_OES_extended_matrix_palette GL_OES_EGL_image GL_OES_EGL_image_external GL_OES_EGL_sync GL_OES_fbo_render_mipmap GL_OES_fixed_point GL_OES_framebuffer_object GL_OES_matrix_get GL_OES_matrix_palette GL_OES_point_size_array GL_OES_point_sprite GL_OES_query_matrix GL_OES_read_format GL_OES_rgb8_rgba8 GL_OES_single_precision GL_OES_stencil8 GL_OES_texture_cube_map GL_OES_vertex_half_float 
02-10 10:58:19.300: D/AndroidGraphics(9907): framebuffer: (5, 6, 5, 0)
02-10 10:58:19.300: D/AndroidGraphics(9907): depthbuffer: (16)
02-10 10:58:19.300: D/AndroidGraphics(9907): stencilbuffer: (0)

... что для меня звучит так, как будто он использует OpenGL ES 1.1 по назначению.Я не могу найти информацию о том, что означает "CM".Однако, глядя на мой logcat от моего Desire HD , работающего под той же версией приложения:

02-10 11:04:16.515: D/AndroidGraphics(10851): GL20: true
02-10 11:04:16.525: D/AndroidGraphics(10851): OGL renderer: Adreno 205
02-10 11:04:16.525: D/AndroidGraphics(10851): OGL vendor: Qualcomm
02-10 11:04:16.525: D/AndroidGraphics(10851): OGL version: OpenGL ES-CM 1.1
02-10 11:04:16.525: D/AndroidGraphics(10851): OGL extensions: GL_AMD_compressed_3DC_texture GL_AMD_compressed_ATC_texture GL_AMD_performance_monitor GL_APPLE_texture_2D_limited_npot GL_EXT_texture_filter_anisotropic GL_EXT_texture_format_BGRA8888 GL_EXT_texture_type_2_10_10_10_REV GL_OES_blend_equation_separate GL_OES_blend_func_separate GL_OES_blend_subtract GL_OES_compressed_ETC1_RGB8_texture GL_OES_compressed_paletted_texture GL_OES_depth_texture GL_OES_draw_texture GL_OES_framebuffer_object GL_OES_matrix_palette GL_OES_packed_depth_stencil GL_OES_point_size_array GL_OES_point_sprite GL_OES_read_format GL_OES_rgb8_rgba8 GL_OES_stencil_wrap GL_OES_EGL_image GL_OES_texture_cube_map GL_OES_texture_env_crossbar GL_OES_texture_float GL_OES_texture_half_float GL_OES_texture_half_float_linear GL_OES_texture_npot GL_OES_texture_mirrored_repeat GL_QCOM_binning_control GL_QCOM_extended_get GL_QCOM_tiled_rendering 
02-10 11:04:16.535: D/AndroidGraphics(10851): framebuffer: (5, 6, 5, 0)
02-10 11:04:16.535: D/AndroidGraphics(10851): depthbuffer: (16)
02-10 11:04:16.535: D/AndroidGraphics(10851): stencilbuffer: (0)

... он утверждает, что использует ту же версию OpenGL, что и мой планшет.

Разве обе реализации не должны работать одинаково, если обе они имеют одинаковую версию?

Имеет ли какое-то значение аппаратное обеспечение, одно из которых - Nvidia Tegra, а другое - Qualcomm?

Является ли OpenGL 1.1 "эмулированным" как-то, и не совсем верно, на устройстве Tegra?

Я также вижу, что список "Расширений OGL" несколько отличается,Например, при поиске чего-либо, содержащего «blend», я нахожу GL_OES_blend_equation_separate, GL_OES_blend_func_separate и GL_OES_blend_subtract на моем Desire HD, а на моем A500 я не нахожу ничего из того, что могу сказать.

Еслипроблема заключается в этих расширениях, как (если возможно) я могу решить эту проблему?

РЕДАКТИРОВАТЬ: Хорошо, теперь я получил его работать так, как я хотел, но я использую только GL20,Однако я все еще хотел бы решить проблему с помощью GL10 или GL11, если это возможно, поскольку я хочу, чтобы больше устройств могли запускать приложение.

...