- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经在这里阅读了这个问题:Can example "GLImageProcessing" work with multi filters但是,我仍然不明白如何编辑 GLImageProcessing 的示例代码以支持多个滤镜。这是我现在在 Imaging.c 的 drawGL 中执行的代码
有什么帮助吗?
void drawGL(int wide, int high, float val, int mode)
{
GLuint ResultFBO;
GLuint ResultTexture;
static int prevmode = -1;
typedef void (*procfunc)(V2fT2f *, float);
typedef struct {
procfunc func;
procfunc degen;
} Filter;
const Filter filter[] = {
{ brightness },
{ contrast },
{ extrapolate, greyscale },
{ hue },
{ extrapolate, blur }, // The blur could be exaggerated by downsampling to half size
};
#define NUM_FILTERS (sizeof(filter)/sizeof(filter[0]))
rt_assert(mode < NUM_FILTERS);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof(0, wide, 0, high, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glScalef(wide, high, 1);
glBindTexture(GL_TEXTURE_2D, Input.texID);
// Remember the FBO being used for the display framebuffer
glGetIntegerv(GL_FRAMEBUFFER_BINDING_OES, (GLint *)&SystemFBO);
// Create the texture and the FBO the will hold the result of applying the first filter
glGenTextures(1, &ResultTexture);
glBindTexture(GL_TEXTURE_2D, ResultTexture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, wide, high, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glGenFramebuffersOES(1, &ResultFBO);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, ResultFBO);
glFramebufferTexture2DOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_TEXTURE_2D, ResultTexture, 0);
// bind the result FBO
glBindFramebufferOES(GL_FRAMEBUFFER_OES, ResultFBO);
// apply 1st filter
glViewport(0, 0, wide, high);
filter[mode].func(flipquad, val);
// restore original frame buffer object
glBindFramebufferOES(GL_FRAMEBUFFER_OES, SystemFBO);
// use ResultTexture as input for the 2nd filter
glBindTexture(GL_TEXTURE_2D, ResultTexture);
// apply 2nd filter
glViewport(0, 0, wide, high);
filter[2].func(flipquad, val);
glCheckError();
}
最佳答案
您可以通过在两个缓冲区之间交替来扩展此方案:
GLuint stageTextures[2];
glGenTextures(2, stageTextures);
glBindTexture(GL_TEXTURE_2D, stageTexture[0]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, wide, high, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glBindTexture(GL_TEXTURE_2D, stageTexture[1]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, wide, high, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
GLuint stageFBO[2];
glGenFramebuffersOES(2, stageFB0);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, stageFBO[0]);
glFramebufferTexture2DOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_TEXTURE_2D, stageTexture[0], 0);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, stageFBO[1]);
glFramebufferTexture2DOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_TEXTURE_2D, stageTexture[1], 0);
// bind stage 1, sourcing stage 0
glBindFramebufferOES(GL_FRAMEBUFFER_OES, stageFBO[1]);
glBindTexture(GL_TEXTURE_2D, stageTexture[0]);
// apply 1st filter
glViewport(0, 0, wide, high);
filter[mode].func(flipquad, val);
glBindTexture(GL_TEXTURE_2D, 0); // must unbind texture before FBO with that texture attached can be bound
// bind stage 0, sourcing stage 1
glBindFramebufferOES(GL_FRAMEBUFFER_OES, stageFBO[0]);
glBindTexture(GL_TEXTURE_2D, stageTexture[1]);
// apply 2nd filter
glViewport(0, 0, wide, high);
filter[mode].func(flipquad, val);
glBindTexture(GL_TEXTURE_2D, 0); // must unbind texture before FBO with that texture attached can be bound
// bind stage 1, sourcing stage 0
glBindFramebufferOES(GL_FRAMEBUFFER_OES, stageFBO[1]);
glBindTexture(GL_TEXTURE_2D, stageTexture[0]);
// apply 3rd filter
glViewport(0, 0, wide, high);
filter[mode].func(flipquad, val);
glBindTexture(GL_TEXTURE_2D, 0); // must unbind texture before FBO with that texture attached can be bound
// and so on. finally
// Bind SystemFBO so the screen is the target, sourcing stage 0/1
// (depending on if a even or odd number of filters involved)
glBindFramebufferOES(GL_FRAMEBUFFER_OES, SystemFBO);
glBindTexture(GL_TEXTURE_2D, stageTexture[...]); // set to follow the scheme above
// apply n-th filter
glViewport(0, 0, wide, high);
filter[mode].func(flipquad, val);
关于iphone - GLImageProcessing 多个滤镜?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6425861/
我正在使用 Inkscape 0.91。我想使用 Filters -> ABC 的 Noise Transparency 效果,但此较高版本的 Inkscape 中不存在该效果。我在网上看到,在更高的
SVG 滤镜 可以给 SVG 图形的添加特殊效果 SVG 滤镜 SVG有很多的滤镜,但本教程只会展示其中的两三种,其他的需要你可以依葫芦画瓢的使用 我们只需要记住 SVG 能提供什么样的滤镜,然
前言 本文主要给大家介绍了关于ios图片压缩、滤镜、剪切及渲染的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 主要内容: 1、图片基础知识的介绍 2、图片压缩
我想使用 VP8 在我的应用程序中编码视频。我在我的应用程序中使用 RGB24 格式,但 VP8 DirectShow 过滤器只接受 YUV 格式 (http://www.webmproject.or
我想要一个带有白色外发光的黑色文本,以便在彩色 map 上可读。这就是我以前所做的: Harald's Repose Harald's Repose 我想避免重复文本元素,因
如果我使用 camanJS 在图像上应用滤镜,一切都很好,但是当我单击第二个滤镜时,它需要返回到原始图像并将其应用到该图像上,但目前它将第二个滤镜放在仍具有第一个滤镜的图像。 这是我的 html 部分
我有 3 个 System.Drawing.Bitmap 对象。 RGB 前景、RGB 背景和每像素蒙版图像一个字节,其中 0 表示采用背景像素,1 表示采用前景像素。这三个都是相同的维度。 我选择使
谁能确认 Android BlurMaskFilter方法基于高斯模糊(而不是平均模糊)?我真的很惊讶这里的文档并不明确。 最佳答案 引用代码here ,我可以假设它是基于高斯模糊方法。 我完全同意您
本质上,我正在尝试使用 SVG 和 CSS ( like this ) 创建一个渐变 alpha 蒙版,因为 mask 属性是 no longer on the standards跟踪我正在探索 fi
我正在使用CSSGram在我的网站上使图像具有类似 Instagram 的滤镜。下面是向图像添加滤镜的方法: 如何将这种效果添加到网页中的所有图像,而不是使用 在每个图像之前,以及许多图像
我有一组带有背景图像的元素,这些元素上有一个 SVG 滤镜,使背景图像变灰。我需要它,以便当您将鼠标悬停在该元素上时,该 SVG 滤镜会淡化为透明,因此原始彩色图像会在没有滤镜的情况下显示。不幸的是,
如何访问 OpenCV 扩展图像处理模块?我特别需要一个过滤器:fastGlobalSmootherFilter。 我已将 OpenCV 3.2.0 合并到我的 C++ 项目中。我正在寻找这种方法:
看看下面的 CodePen 演示:http://codepen.io/anon/pen/vLPGpZ 这是我的代码: body { position: absolute; top:
请建议我如何在 Android 相机的运行时应用照片效果/滤镜?无需使用 JNI 、 OpenGl 和 open CV 。我只需要通过 Java 代码应用效果。 最佳答案 步骤 1. 将帧从 NV21
我正在尝试沿着特定路径在 Opengl 中渲染点 Sprite 。我将 Sprite 定义为 2D 纹理,并将其设置为使用 GL_NEAREST 作为 mag/min 过滤器。我还定义了一个包含一些
我想实现这样的目标: 此图片来自this应用程序。 我的问题是,我应该依赖像 this 这样的东西吗? ,自己做,或者即使有其他一些我不知道的第三个库,也可以推荐。 我试图获得更多的意见,而不是实际的
我使用 Pixastic 来更改 Canvas 上图像的亮度和对比度等简单效果。 但是,我一直没能找到将这些效果一起应用的方法。例如。应用亮度然后在这个已经变亮的图像上应用对比度,而不是原始图像。 使
我在使用 Core image 时遇到了问题。我正在做的是从 UIImageView 获取图像,然后使用我在教程中找到的一些代码(我是核心图像的新手)但是我想在我尝试时将棕褐色图像放回同一个 UIIm
我这里有一张图片: 我想在网站 theverge.com 中复制 css 样式(见下图) 我将在我的博客(主页)中使用它,因为我正在尝试复制 theverge.com 网站的内容。这就像在半透明渐变和
我想使用聚光灯效果,但它似乎只在 Chrome 中有效,在 Firefox 中看起来“刚刚好”,但在 Safari 中无法定位 (x,y,z)。 (其他浏览器未测试) 我尝试了不同的滤镜和原始单位,虽
我是一名优秀的程序员,十分优秀!