用 RGBA 值填充 C++ Cinder 纹理
Fill C++ Cinder textures with RGBA values
我使用 Cinder 库并想创建一个纹理,填充我保存在数组中的 RGBA 值。网上没有有用的解释。
我以前没有使用过 cinder,但快速阅读文档似乎表明您可以从文件或 Surface 加载纹理。
所以看着 docs 看起来你创建了一个表面如下:
cinder::Surface8u surf( 128, 128, SurfaceChannelOrder::RGBA );
然后您可以使用 getData 函数填充它,如下所示:
uint8_t* pCols = surf.getData();
for( int y = 0; y < 128; y++ )
{
for( int x = 0; x < 128; x++ )
{
// Fill each pixel with red.
const idx = (y * (128 * 4)) + (x * 4);
pCols[idx + 0] = 0xff;
pCols[idx + 1] = 0x00;
pCols[idx + 2] = 0x00;
pCols[idx + 3] = 0xff;
}
}
然后您将按如下方式从表面加载纹理:
cinder::gl::Texture texture( surf );
我使用 Cinder 库并想创建一个纹理,填充我保存在数组中的 RGBA 值。网上没有有用的解释。
我以前没有使用过 cinder,但快速阅读文档似乎表明您可以从文件或 Surface 加载纹理。
所以看着 docs 看起来你创建了一个表面如下:
cinder::Surface8u surf( 128, 128, SurfaceChannelOrder::RGBA );
然后您可以使用 getData 函数填充它,如下所示:
uint8_t* pCols = surf.getData();
for( int y = 0; y < 128; y++ )
{
for( int x = 0; x < 128; x++ )
{
// Fill each pixel with red.
const idx = (y * (128 * 4)) + (x * 4);
pCols[idx + 0] = 0xff;
pCols[idx + 1] = 0x00;
pCols[idx + 2] = 0x00;
pCols[idx + 3] = 0xff;
}
}
然后您将按如下方式从表面加载纹理:
cinder::gl::Texture texture( surf );