满足条件时是不是可以在 GLSL 着色器中回调 C/C++ 函数/代码? [关闭]

Posted

技术标签:

【中文标题】满足条件时是不是可以在 GLSL 着色器中回调 C/C++ 函数/代码? [关闭]【英文标题】:Is it possible to callback C/C++ function/code in a GLSL shader when conditions are met? [closed]满足条件时是否可以在 GLSL 着色器中回调 C/C++ 函数/代码? [关闭] 【发布时间】:2017-01-29 21:12:04 【问题描述】:

是否可以从 GLSL 着色器运行 C/C++ 代码?例如。在片段着色器中,像素 X,Y 已到达,因此调用 C/C++ 函数,然后照常继续。 (由于屏幕很小,功能也很小,所以性能应该不是大问题。)

【问题讨论】:

不,这绝对不可能。 为什么需要这个?你想做什么? @Borgleader 我正在尝试做(模拟)h-blank 光栅效果。 我认为这是XY problem 怎么样?据我所知,hblank 会在 SNES/Genesis 上触发中断。 【参考方案1】:

没有。将 GPU 视为仅适用于 GLSL 程序的特殊机器。

但是您可以编写该函数(使用 GLSL 语言,而不是 C/C++)并在着色器中调用它。如果您打算在片段着色器中使用,那么也将此函数编译为片段着色器并将其链接到您使用它的程序。

调用着色器必须声明此函数,否则将被忽略。

【讨论】:

条件满足时完全退出着色器/渲染过程呢? 一旦着色器开始工作,由于 glDrawXXXX 调用,您无法停止它们。您可以设置要处理的数据范围,而不是所有数据,但您不能在流程中的任何位置退出/进入着色器。 那么有没有办法“逐行”(扫描线)绘制? 哦,是的,您可以只发送一行 glDraw 并获得一些反馈。但是有数以万计(或只有几千)行的绘制调用是一个反性能问题。 我的垂直高度(行数)不会超过 240。虽然我不确定如何实际绘制纹理,并且所有内容都真正“逐行”。

以上是关于满足条件时是不是可以在 GLSL 着色器中回调 C/C++ 函数/代码? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的着色器中的 GLSL 纹理坐标不是线性的?

在 GLSL 顶点着色器中,您可以访问索引缓冲区中顶点的索引,而不仅仅是顶点缓冲区吗?

GLSL:使用片段着色器进行对象翻译

一次调用可以在 glsl 计算着色器中进行乒乓传播吗?

在顶点着色器中更改顶点的颜色

从 GLSL 着色器中获取常量