满足条件时是不是可以在 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++ 函数/代码? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章