标签: texture2d

映射动态纹理导致"已经映射的错误"

我刚刚开始使用Direct3D11,我正在尝试创建一个动态纹理,我计划每秒多次使用新数据进行更新.我的问题是每次用新数据更新纹理时,我都会从D3D调试器中得到这个错误:

D3D11:错误:ID3D11DeviceContext :: Map:此资源已经映射![RESOURCE_MANIPULATION错误#2097213:RESOURCE_MAP_ALREADYMAPPED]

在运行应用程序一段时间后,最终会从Map调用变为E_OUTOFMEMORY错误.

我正在创建这样的纹理:

D3D11_TEXTURE2D_DESC td;
td.ArraySize = 1;
td.BindFlags = D3D11_BIND_SHADER_RESOURCE;
td.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
td.Format = DXGI_FORMAT_B8G8R8X8_UNORM;
td.Height = height;
td.Width  = width;
td.MipLevels = 1;
td.MiscFlags = 0;
td.SampleDesc.Count = 1;
td.SampleDesc.Quality = 0;
td.Usage = D3D11_USAGE_DYNAMIC;

HR(m_device->CreateTexture2D(&td, 0, &texture));
Run Code Online (Sandbox Code Playgroud)

并更新其数据,如下所示:

HR(m_deviceContext->Map(texture, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource));
BYTE* mappedData = reinterpret_cast<BYTE*>(mappedResource.pData);
for(UINT i = 0; i < height; ++i)
{
    memcpy(mappedData, buffer,rowspan);
    mappedData += mappedResource.RowPitch; 
    buffer += rowspan;
}
m_deviceContext->Unmap(texture, 0);
Run Code Online (Sandbox Code Playgroud)

在创建纹理并将数据映射到它之前,我在程序中所做的就是初始化Direct3D设备.我完全被我做错了所困扰.我一直试图在msdn上尽可能多地阅读这篇文章,但没有任何东西可以帮助我弄清楚出了什么问题.根据msdn,我正在采取适当的步骤:

http://msdn.microsoft.com/en-us/library/ff476905(v=vs.85).aspx#Dynamic

To fill a dynamic …
Run Code Online (Sandbox Code Playgroud)

c++ directx directx-11 texture2d

5
推荐指数
1
解决办法
2380
查看次数

CL/GL-Interop错误的OpenGL纹理格式类型?

我正在使用CUDA Toolkit 4.0在我的Geforce 330M上尝试使用OpenCL-OpenGL互操作.

我想捕获一个帧,将该数据用作Image2DOpenCL内核的输入图像().内核应该操纵数据并将其写入一个Image2DGL具有附加OpenGL纹理的图像对象.基本上它看起来像这样:

 _______________      RGB        _______________
|               |    uint8*     |               |   CL_RGBA / CL_UNORM_INT8
|   Grabber     | ------------> |   Image2D     | -------------------------.
|   avcodec     |               |   [input]     |                          |
|_______________|               |_______________|                          |
                                                                           |    
                                                                           V
 _______________                 _______________                       _______________
|               |               |               |                     |               |
|   Texture     | ------------> |   Image2DGL   | <-----------------> |    Kernel     |
|_______________|               |   [output]    |                     |_______________|
                                |_______________|
Internal
Format: GL_RGBA
Format: GL_RGBA
Type: ?
Run Code Online (Sandbox Code Playgroud)

我正在初始化纹理:

GLuint tex = 0;

void initTexture( …
Run Code Online (Sandbox Code Playgroud)

opengl opencl texture2d libavcodec

5
推荐指数
1
解决办法
1278
查看次数

OpenGL纹理没有正确显示 - 奇怪的行为

我想用OpenCV检测一个标记,然后我想用OpenGL将它与图像重叠.第一部分是好的(我完美地实现了检测标记),但我对第二部分有一些问题.

标记是:

在此输入图像描述

和图像是:

在此输入图像描述

但结果如下:

在此输入图像描述

生成图像纹理的代码是:

GLuint *textures = new GLuint[2];
glGenTextures(2, textures);
Mat image = imread("Immagine.png");
glBindTexture(GL_TEXTURE_2D, textures[1]);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, 4,image.cols, image.rows, 0, GL_RGB,GL_UNSIGNED_BYTE, image.data);
Run Code Online (Sandbox Code Playgroud)

并显示我使用的纹理:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_TEXTURE_2D);
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, WIDTH, HEIGHT, 0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glBindTexture(GL_TEXTURE_2D, textures[1]);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex2f((GLfloat)(coord[1].x),(GLfloat)(coord[1].y));
glTexCoord2f(1.0f, 0.0f); glVertex2f((GLfloat)(coord[2].x),(GLfloat)(coord[2].y));
glTexCoord2f(1.0f, 1.0f); glVertex2f((GLfloat)(coord[3].x),(GLfloat)(coord[3].y));
glTexCoord2f(0.0f, 1.0f); glVertex2f((GLfloat)(coord[0].x),(GLfloat)(coord[0].y)); 
glEnd();
Run Code Online (Sandbox Code Playgroud)

我不知道为什么纹理图像是如此奇怪.此外,我使用相同的代码来显示(在opengl窗口上)从网络摄像头捕获的帧,我没有问题.我还注意到,如果我在角落处使用相同的图像没有数字,它可以正常工作(即使它不在标记的相同位置/坐标).

有谁有想法吗?

c++ opengl opencv texture2d

4
推荐指数
1
解决办法
556
查看次数

c ++ Directx11捕获屏幕并保存到文件

我有将texture2d保存到文件的问题,它总是给我黑色图像.这是代码:

HRESULT hr = SwapChain->GetBuffer( 0, __uuidof( ID3D11Texture2D ), reinterpret_cast< void** >( &g_pSurface ) );
if( g_pSurface )
{
    ID3D11Texture2D* pNewTexture = NULL;

    D3D11_TEXTURE2D_DESC description;
    g_pSurface->GetDesc( &description );
    description.BindFlags = 0;
    description.CPUAccessFlags = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;
    description.Usage = D3D11_USAGE_STAGING;

    HRESULT hr = d3d11Device->CreateTexture2D( &description, NULL, &pNewTexture );
    if( pNewTexture )
    {
        d3d11DevCon->CopyResource( pNewTexture, g_pSurface );

        hr=D3DX11SaveTextureToFileA(d3d11DevCon, pNewTexture, D3DX11_IFF_BMP, "screen.bmp");
        return;
    }
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

c++ screenshot save directx-11 texture2d

4
推荐指数
1
解决办法
8696
查看次数

GL_TEXTURE_2D与GL_TEXTURE_RECTANGLE

我有一个小程序,呈现黄色三角形两次,一次在帧缓冲的左半部分,一次在右侧.

转储纹理

在此输入图像描述

现在,之后我在屏幕上渲染此帧缓冲区的内容.

如果我在framebuffer构造函数中使用GL_TEXTURE_RECTANGLE,它可以工作:

https://github.com/elect86/Joglus/blob/master/Joglolus/src/joglus/example1/FrameBuffer.java

在绑定纹理时,函数renderFullScreenQuad,第372行:

https://github.com/elect86/Joglus/blob/master/Joglolus/src/joglus/example1/GlViewer.java

并在片段着色器中使用sampler2DRect:

#version 330

out vec4 outputColor;
uniform sampler2DRect texture0;

void main() {
    outputColor = texture(texture0, gl_FragCoord.xy);
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我将所有RECTANGLE更改为2D并且我在fs中使用sample2D,我会在显示结束时获得一个完整的黑色图像(),尽管纹理的转储始终显示正确的图像......我想知道为什么.

jogl texture2d render-to-texture opengl-3

4
推荐指数
1
解决办法
3178
查看次数

Unity c#,截取屏幕截图并以jpg格式保存到文件中

我正在尝试使用screencapture并将其保存为jpg格式的文件.我正在关注这个例子.

http://docs.unity3d.com/ScriptReference/Texture2D.EncodeToPNG.html

这是我到目前为止:

    string jpgFile = Application.persistentDataPath + "/scrn-1.jpg";
    Texture2D tex = new Texture2D (Screen.width, Screen.height);
    tex.ReadPixels (new Rect(0, 0, Screen.width, Screen.height), 0, 0);
    tex.Apply ();
    var bytes = tex.EncodeToJPG();
    Destroy (tex);
    System.IO.File.WriteAllBytes(jpgFile, bytes);
Run Code Online (Sandbox Code Playgroud)

我发现在iOS上的Unity中运行它给了我:

JPEG参数struct mismatch:库认为大小是372,调用者期望360

但是,如果我将转换更改为tex.EncodeToPNG(); 并将文件名更改为.png一切正常.我不知道如何进行任何援助将不胜感激.谢谢.

c# android texture2d unity-game-engine ios

4
推荐指数
1
解决办法
1万
查看次数

如何将类型“UnityEngine.Texture2D”转换为“UnityEngine.Sprite”?

您好,我尝试将纹理 2D 转换为图像(并且我无法使用原始图像,因为分辨率在手机中不匹配),但问题是图像没有纹理元素。如何在Image.Sprite中转换UnityEngine.Texture2D。

//Image Profile
protected Texture2D pickedImage;
public Texture2D myTexture2D;
public RawImage getRawImageProfile;
public RawImage getRawImageArrayProfile;

public Image getRawImageProfile2;
public Image getRawImageArrayProfile2;

 public void PickImageFromGallery(int maxSize = 256)
{
    NativeGallery.GetImageFromGallery((path) => 
    {
        if( path != null )
        {
            byte[] imageBytes = File.ReadAllBytes(path);
            pickedImage = null;
            pickedImage = new Texture2D(2, 2);
            pickedImage.LoadImage(imageBytes);
            getRawImageProfile.texture = pickedImage;
            getRawImageArrayProfile.texture = pickedImage;

            getRawImageProfile2.sprite = pickedImage; //ERROR CONVERT SPRITE
            //getRawImageArrayProfile2.texture = pickedImage;
        }

    }, maxSize: maxSize);

    byte[] myBytes;
    myBytes = pickedImage.EncodeToPNG();
    enc = Convert.ToBase64String(myBytes);       
}
Run Code Online (Sandbox Code Playgroud)

image sprite texture2d unity-game-engine

4
推荐指数
1
解决办法
9029
查看次数

如何翻转内存中的图像?

我想翻转图像并为翻转后的图像创建一个新的Texture2D。

我做了一些研究,发现这段代码将创建一个新的Texture2D;

RenderTarget2D newTarget = new RenderTarget2D(GraphicsDevice, partWidth, partHeight)

GraphicsDevice.SetRenderTarget(newTarget);

SpriteBatch.Draw(original, Vector2.Zero, partSourceRectangle, ... )

GraphicsDevice.SetRenderTarget(null);

Texture2D newTexture = (Texture2D)newTarget;
Run Code Online (Sandbox Code Playgroud)

我知道 newTexture 很容易从内存中删除,因此建议我需要使用 getData/SetData 来创建更永久的纹理。有人可以建议我执行此操作的具体语法吗?

c# xna image flip texture2d

3
推荐指数
1
解决办法
1764
查看次数

如何在运行时使用 .bmp 文件并在 Unity 中创建纹理?

我在一个 Unity 项目中工作,用户选择.bmp用于制作Texture2D并粘贴到模型的图像文件(格式),我创建了下一个代码,我可以正常使用.png.jpg文件,但是当我尝试加载时,.bmp我得到了只有(我假设)带有红色“?”的默认纹理 符号,所以我认为是图像格式,如何.bmp在运行时使用文件创建纹理?

这是我的代码:

public static Texture2D LoadTexture(string filePath)
{
    Texture2D tex = null;
    byte[] fileData;

    if (File.Exists(filePath))
    {
        fileData = File.ReadAllBytes(filePath);
        tex = new Texture2D(2, 2);
        tex.LoadImage(fileData);
    }

    return tex;
}
Run Code Online (Sandbox Code Playgroud)

c# textures bmp texture2d unity-game-engine

3
推荐指数
1
解决办法
2771
查看次数

如何使用高度和宽度调整 Texture2D 的大小?

我试图调整纹理的大小和宽度及其显示索引超出宽度/高度

纹理需要调整大小,因为我在其他纹理上使用它以应用于特定坐标,所以我无法调整纹理图形的大小是我的 texture2D

graphics.Resize((horizo​​ntalx - horizo​​ntaly), (verticalx - verticaly), TextureFormat.RGBA32, false);//创建具有高度和宽度的纹理

SetPixels32 只能在 RGBA32 或 BGRA32 纹理上调用,但在 TextureFormat(12) UnityEngine.Texture2D:SetPixels32(Color32[]) 上调用

c# opencv texture2d unity-game-engine image-resizing

3
推荐指数
1
解决办法
6621
查看次数