本文整理汇总了C++中BinaryInput::getCArray方法的典型用法代码示例。如果您正苦于以下问题:C++ BinaryInput::getCArray方法的具体用法?C++ BinaryInput::getCArray怎么用?C++ BinaryInput::getCArray使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BinaryInput
的用法示例。
在下文中一共展示了BinaryInput::getCArray方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: parse
void ParseOBJ::parse(BinaryInput& bi, const ParseOBJ::Options& options, const String& basePath) {
m_filename = bi.getFilename();
String bp = basePath;
if (bp == "<AUTO>") {
bp = FilePath::parent(FileSystem::resolve(m_filename));
}
parse((const char*)bi.getCArray() + bi.getPosition(),
size_t(bi.getLength() - bi.getPosition()), bp, options);
}
示例2: debugAssertM
GFont::GFont(const String& filename, BinaryInput& b) {
int ver = b.readInt32();
debugAssertM(ver == 1 || ver == 2, "Can't read font files other than version 1");
(void)ver;
if (ver == 1) {
charsetSize = 128;
} else {
charsetSize = b.readInt32();
}
// Read the widths
subWidth.resize(charsetSize);
for (int c = 0; c < charsetSize; ++c) {
subWidth[c] = b.readUInt16();
}
baseline = b.readUInt16();
int texWidth = b.readUInt16();
charWidth = texWidth / 16;
charHeight = texWidth / 16;
// The input may not be a power of 2
int width = ceilPow2(charWidth * 16);
int height = ceilPow2(charHeight * (charsetSize / 16));
// Create a texture
const uint8* ptr = ((uint8*)b.getCArray()) + b.getPosition();
debugAssertM((b.getLength() - b.getPosition()) >= width * height,
"File does not contain enough data for this size texture");
Texture::Preprocess preprocess;
preprocess.computeMinMaxMean = false;
const bool generateMipMaps = true;
m_texture =
Texture::fromMemory
( filename,
ptr,
ImageFormat::R8(),
width,
height,
1,
1,
ImageFormat::R8(),
Texture::DIM_2D,
generateMipMaps,
preprocess);
m_textureMatrix[0] = 1.0f / m_texture->width();
m_textureMatrix[1] = 0;
m_textureMatrix[2] = 0;
m_textureMatrix[3] = 0;
m_textureMatrix[4] = 0;
m_textureMatrix[5] = 1.0f / m_texture->height();
m_textureMatrix[6] = 0;
m_textureMatrix[7] = 0;
m_textureMatrix[8] = 0;
m_textureMatrix[9] = 0;
m_textureMatrix[10] = 1;
m_textureMatrix[11] = 0;
m_textureMatrix[12] = 0;
m_textureMatrix[13] = 0;
m_textureMatrix[14] = 0;
m_textureMatrix[15] = 1;
m_name = filename;
}
示例3: decodeJPEG
void GImage::decodeJPEG(
BinaryInput& input) {
struct jpeg_decompress_struct cinfo;
struct jpeg_error_mgr jerr;
int loc = 0;
channels = 3;
// We have to set up the error handler, in case initialization fails.
cinfo.err = jpeg_std_error(&jerr);
// Initialize the JPEG decompression object.
jpeg_create_decompress(&cinfo);
// Specify data source (eg, a file, for us, memory)
jpeg_memory_src(&cinfo, const_cast<uint8*>(input.getCArray()), input.size());
// Read the parameters with jpeg_read_header()
jpeg_read_header(&cinfo, TRUE);
// Set parameters for decompression
// (We do nothing here since the defaults are fine)
// Start decompressor
jpeg_start_decompress(&cinfo);
// Get and set the values of interest to this object
this->width = cinfo.output_width;
this->height = cinfo.output_height;
// Prepare the pointer object for the pixel data
_byte = (uint8*)System::malloc(width * height * 3);
// JSAMPLEs per row in output buffer
int bpp = cinfo.output_components;
int row_stride = cinfo.output_width * bpp;
// Make a one-row-high sample array that will go away when done with image
JSAMPARRAY temp = (*cinfo.mem->alloc_sarray)
((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1);
// Read data on a scanline by scanline basis
while (cinfo.output_scanline < cinfo.output_height) {
// We may need to adjust the output based on the
// number of channels it has.
switch (bpp) {
case 1:
// Grayscale; decompress to temp.
jpeg_read_scanlines(&cinfo, temp, 1);
// Expand to three channels
{
uint8* scan = &(_byte[loc * 3]);
uint8* endScan = scan + (width * 3);
uint8* t = *temp;
while (scan < endScan) {
uint8 value = t[0];
// Spread the value 3x.
scan[0] = value;
scan[1] = value;
scan[2] = value;
scan += 3;
t += 1;
}
}
break;
case 3:
// Read directly into the array
{
// Need one extra level of indirection.
uint8* scan = _byte + loc;
JSAMPARRAY ptr = &scan;
jpeg_read_scanlines(&cinfo, ptr, 1);
}
break;
case 4:
// RGBA; decompress to temp.
jpeg_read_scanlines(&cinfo, temp, 1);
// Drop the 3rd channel
{
uint8* scan = &(_byte[loc * 3]);
uint8* endScan = scan + width * 3;
uint8* t = *temp;
while (scan < endScan) {
scan[0] = t[0];
scan[1] = t[1];
scan[2] = t[2];
scan += 3;
t += 4;
}
}
//.........这里部分代码省略.........