我正在为Android Galaxy tab 10.1开发一个应用程序,它有Tegra 250 T20。我在GLSL中写了一个带有for()循环的着色器。我希望for()循环在某些条件下提前终止。
我所看到的是着色器编译器解开了循环并且正在执行整个展开的代码,这会影响性能。
以下是问题:Tegra 250 T20是否支持执行流指令?如果是这样,我怎么能告诉编译器实际使用它们。
非常感谢所有回复。
ETA:glGetString(GLES20.GL_SHADING_LANGUAGE_VERSION)返回“OpenGL ES GLSL 1.00”。
另外如果GLSL无法处理它,我怎么能用ARB汇编语言来自己编写呢?
ETA2:GL_EXTENSIONS有: 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
答案 0 :(得分:1)
在大多数嵌入式平台上 - 我相信只支持120版本的所有平台--GLSL不支持任何类型的动态循环。例如:您不能声明变量来确定循环循环的频率。
唯一的可能性是将其分成几个条件块(如果适用)。
答案 1 :(得分:1)
Negraher Tegra顶点和片段着色器单元支持动态控制流;你需要循环才能在编译时展开。大多数其他OpenGL ES 2.0实现支持动态控制流,但标准不需要它。