【问题标题】:Android GLSL fragment shader on NVIDIA tegra2NVIDIA tegra2 上的 Android GLSL 片段着色器
【发布时间】:2013-03-20 18:43:26
【问题描述】:

我正在为具有 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 有这个: 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

【问题讨论】:

    标签: android tegra


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复! glGetString(GLES20.GL_SHADING_LANGUAGE_VERSION) 确实返回:OpenGL ES GLSL 1.00。
    • 是的:看来你运气不好。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-05-10
      • 1970-01-01
      • 1970-01-01
      • 2017-04-12
      • 1970-01-01
      • 1970-01-01
      • 2014-07-26
      • 1970-01-01
      • 2013-07-30
      相关资源
      最近更新 更多