0

我正在为具有 Tegra 250 T20 的 android Galaxy Tab 10.1 开发应用程序。我正在用 GLSL 编写一个带有 for() 循环的着色器。我希望 for() 循环在某些情况下提前终止。

我所看到的是着色器编译器已展开循环并且正在执行整个展开代码,这会降低性能。

问题来了:Tegra 250 T20 是否支持执行流指令?如果是这样,我怎么能告诉编译器实际使用它们。

非常感谢任何和所有的答复。

ETA:glGetString(GLES20.GL_SHADING_LANGUAGE_VERSION) 返回“OpenGL ES GLSL 1.00”。

此外,如果 GLSL 无法处理,我如何用 ARB 汇编语言编写自己的操作?

ETA2: GL_EXTENSIONS has this: GL_NV_platform_binary GL_OES_rgb8_rgba8 GL_OES_EGL_sync GL_OES_fbo_render_mipmap GL_NV_depth_nonlinear GL_NV_draw_path GL_NV_texture_npot_2D_mipmap GL_OES_EGL_image GL_OES_EGL_image_external GL_OES_vertex_half_float GL_NV_framebuffer_vertex_attrib_array GL_NV_coverage_sample GL_OES_mapbuffer GL_ARB_draw_buffers GL_EXT_Cg_shader GL_EXT_packed_float GL_OES_texture_half_float GL_OES_texture_float GL_EXT_texture_array GL_OES_compressed_ETC1_RGB8_texture GL_EXT_texture_compression_latc GL_EXT_texture_compression_dxt1 GL_EXT_texture_compression_s3tc GL_EXT_texture_filter_anisotropic GL_NV_get_tex_image GL_NV_read_buffer GL_NV_shader_framebuffer_fetch GL_NV_fbo_color_attachments GL_EXT_bgra GL_EXT_texture_format_BGRA8888 GL_EXT_unpack_subimage GL_NV_texture_compression_s3tc_update

4

2 回答 2

1

相邻的 Tegra 顶点和片段着色器单元支持动态控制流;您需要循环才能在编译时展开。大多数其他 OpenGL ES 2.0 实现支持动态控制流,但标准不需要它。

于 2013-03-20T10:43:26.307 回答
1

在大多数嵌入式平台上——我相信所有只支持版本 120 的平台——GLSL 不支持任何类型的动态循环。例如:您不能声明一个变量来确定循环应该多久循环一次。

唯一的可能是将它分成几个条件块(如果适用)。

于 2012-03-20T17:19:17.443 回答