问题标签 [mipmaps]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
703 浏览

opengl - 由于 mipmapping 的性能提升

为什么 mipmap 会提高性能?我在网上某处读到“当我们有 256 x 256 纹理数据并想要将其映射到 4x4 时,驱动程序只会将生成的 4x4 mipmap 级别复制到 GPU 内存而不是 256x 256 数据。采样将适用于复制的 4x4 数据在 GPU 内存上,这将节省大量计算”我只想知道它是否正确?

此外,当 glTeximage 调用发生时,它会将纹理数据上传到 gpu 内存中,这些数据在 glteximage 调用中传递。然后它与上面的说法相冲突。当我们调用 glgeneratemipmap() 时,它是否会在 CPU 端创建所有 mipmap 级别,然后在 GPU 端复制所有这些级别?

0 投票
1 回答
1403 浏览

graphics - Directx 11.2 mipmaps 与 SharpDX?

我正在使用 SharpDX 的 11.2 兼容版本,并且到目前为止渲染效果很好,但是我开始使用大纹理进行测试,并且需要 mipmaping 以避免高于屏幕分辨率纹理的丑陋伪影。

据我了解,如果我想要完整的 mipmap 级别集,我需要在我的纹理创建中将 MipLevels 设置为 0,但是,将 MipLevels 参数从 1(它是什么并且有效)更改为 0(我的目标)会导致异常纹理实例化行上的参数无效。

错误必须在该点或之前(在到达任何渲染之前和声明步骤之前崩溃)。

这是我声明纹理状态的方式:

0 投票
1 回答
219 浏览

ios - OpenGL ES 2.0 以多种分辨率缩放

我的 iOS 应用程序在 opengles 视图中绘制 2D 曲线。渲染场景非常昂贵(最多可能需要 1-2 秒),这意味着,AFAIK,我无法更改缩放、重绘和重新渲染以进行缩放增量更改(由于捏合-飞涨)。我目前直接在渲染到屏幕的缓冲区上绘制。

我认为我可以实现缩放的一种方法是以给定的分辨率渲染到纹理,然后用该纹理的一部分渲染一个四边形(可能以不同的比例和翻译)。我的猜测是它将使我当前使用的内存增加一倍(如果我当然将纹理保持在与屏幕相同的分辨率)。有人可以确认吗?有没有另一种方法可以在不重绘的情况下进行缩放,同时又不会使图形内存使用量增加一倍?

现在,如果我想保持良好的质量,我将不得不以不同的分辨率重新渲染。我最初的想法是“手动”创建具有例如 2 个级别的 mipmap(1 个纹理用于​​ 100-150% 缩放,另一个用于 150-200% 缩放)。这一次,我将有 1 个缓冲区 + 2 个纹理。我当然可以在平移时重新渲染,但我认为用户体验不会很好。关于如何从用户体验和/或记忆的角度改进它的任何想法?

0 投票
1 回答
335 浏览

webgl - 具有透明度的 WebGL 纹理 mipmappable?打开 mipmapping 时变为不透明

gl.LINEAR_MIPMAP_NEAREST简单的问题是 -和之间有什么区别gl.NEAREST_MIPMAP_LINEAR吗?我使用了第一个,结果不好(见下文),并在网上找到了第二个。有趣的是,两者都是定义的(在 Chrome 中),我想知道它们的区别是什么。

真正的问题是 - 如果我有一个透明的纹理图集(包含字形),我可以使用 mipmapping 吗?当缩放到小尺寸时,字形闪烁,我想通过 mipmapping 消除。

但是当我打开 mipmapping(只改变TEXTURE_MIN_FILTERfrom LINEARto LINEAR_MIPMAP_NEAREST,然后调用generateMipmap())时,透明度完全消失了,整个纹理变成黑色。

我了解 mipmap 可能会导致黑色墨水渗入透明区域,但不会在所有 mipmap 级别(包括原始大小)上填充整个纹理。

我错过了什么知识?

0 投票
1 回答
5935 浏览

opengl - glTexImage2D 与 gluBuild2DMipmaps

非常基本的 OpenGL 纹理创建代码:

和渲染:

文使用glTexImage2D,没有画,但gluBuild2DMipmaps我看到了 gDebugger 正确创建纹理的结果。问题是什么?

0 投票
0 回答
1357 浏览

opengl - 如何在 mipmaped 纹理上实现各向异性过滤?

我正在加载纹理并使用glGenerateMipmap()它来实现某种程度的 mipmaping。

我在 nVidia gt 555m 和 Intel HD 3000 上得到不同的结果。

令人惊讶的是,在 intel hd 3000 上渲染的纹理质量比 nVidia gt 555m 好得多。

当程序在 nVidia 上运行时,纹理略微模糊。当程序从 intel HD 运行时,纹理的质量看起来要好得多。

纹理的平铺在 nVidia 上更加明显!! 在此处输入图像描述

在 glGenerateMipmap() 的描述中指定 glGenerateMipmap 的工作方式对于 OpenGL 的不同实现是不同的。

这与 glHint() GL_FASTEST 、 GL_NICEST 和 GL_DONT_CARE 有关系吗?还是我自己更好地贴图纹理?

0 投票
1 回答
265 浏览

sprite-kit - SKTextureAtlas 中的 SKTexture 是否支持 mipmap 功能?

来自苹果文档:“如果纹理的两个维度都是 2 的幂,则只能请求 mipmap。”

但是,尚不清楚来自 SKTextureAtlas 的 SKTextures 是否也支持此功能(因为它们本质上有些不同)。

我问这个问题是因为实际上很难从结果中看出是否有任何东西被 mipmap 了。

0 投票
1 回答
945 浏览

opengl - glGenerateMipmap 是否在 sRGB 纹理的线性空间中执行平均?

OpenGL 3.3 规范似乎没有要求在线性空间中生成 mipmap。我只能找到以下内容:

派生的mipmap数组的内部格式都与levelbase数组的格式匹配,并且派生数组的维度遵循3.8.14节中描述的要求。派生数组的内容是通过对 levelbase 数组的重复过滤缩减来计算的。对于一维和二维阵列纹理,每一层都是独立过滤的。不需要特定的过滤器算法,但建议使用盒式过滤器作为默认过滤器。

我知道如果原始图像在 sRGB 中,调用 glGenerateMipMap 的结果是在 sRGB 中,我对此没有任何问题。但是中间会发生什么呢?当然,我们不想平均对数刻度上的颜色。那是特定于实现的吗?

0 投票
1 回答
102 浏览

opengl - OpenGL mipmapping 不一致?

我有一个 512X512 纹理,其中包含许多我想在我的应用程序中使用的图像。将图像数据添加到纹理后,我保存单个图像的纹理坐标。后来我将这些应用到我正在绘制的一些四边形上。纹理已激活 mipmapping。

当我在应用程序的两次不同运行中以完全相同的实例截取渲染场景的屏幕截图时,我注意到仅在使用此 mipmapped 纹理纹理的那些四边形之间存在图像差异。mipmapping 会导致这样的问题吗?

0 投票
1 回答
379 浏览

android - 从 OpenGL ES mipmaps 创建 OpenCL 内存对象

我的 android 应用程序将一个 OpenGL texture2D 传递给我的 OpenCL 内核,但是当我将 clCreateFromGLTexture2D() 与 mipmap 级别 1 一起使用时,我得到 CL_INVALID_MIPLEVEL。

我正在创建我的 OpenGL 纹理并生成这样的 mipmap:

然后通过将纹理与 FBO 绑定来渲染纹理:

然后我像这样创建一个 cl 内存对象:

当 miplevel 设置为 0 并且所有内核工作正常时,内存对象创建成功。只有当 miplevel 设置为上述函数调用时才会出现 CL_INVALID_MIPLEVEL 错误。

OpenCL 规范文档(http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateFromGLTexture2D.html)说,一个可能的原因可能是 OpenGL 实现不支持从非零 mipmap 级别。但是我不知道这是否确实如此,也不知道如何找出答案。

编辑: 在安东的回复之后,我将 OpenGL 纹理生成更改为以下内容:

在绘制到与纹理绑定的 FBO 之后,这就是我生成 mipmap 的方式:

尝试从 mipmap 级别不等于 0 的 GL 纹理创建 CL 内存对象时,我仍然遇到相同的错误。