コード例 #1
0
ファイル: fn_binary_buffer.cpp プロジェクト: YoutaVen/Vulkan
IBinaryBufferSP VKTS_APIENTRY binaryBufferCreate(const uint8_t* data, const size_t size)
{
    if (!data || size == 0)
    {
        return IBinaryBufferSP();
    }

    return IBinaryBufferSP(new BinaryBuffer(data, size));
}
コード例 #2
0
ファイル: fn_common.cpp プロジェクト: YoutaVen/Vulkan
IBinaryBufferSP VKTS_APIENTRY commonSerializeStructureType(const void* ptr)
{
    if (!ptr)
    {
        return IBinaryBufferSP();
    }

    size_t totalSize = 0;

    const VkTsStructureTypeHeader* sourceStructureTypeHeader = (const VkTsStructureTypeHeader*) ptr;

    while (sourceStructureTypeHeader)
    {
        totalSize += commonGetStructureTypeSize(sourceStructureTypeHeader);

        sourceStructureTypeHeader = (const VkTsStructureTypeHeader*) sourceStructureTypeHeader->pNext;
    }

    //

    std::unique_ptr<uint8_t[]> data = std::unique_ptr<uint8_t[]>(new uint8_t[totalSize]);

    if (!data.get())
    {
        return IBinaryBufferSP();
    }

    //

    sourceStructureTypeHeader = (const VkTsStructureTypeHeader*) ptr;

    VkTsStructureTypeHeader* targetStructureTypeHeader = nullptr;

    size_t currentSize = 0;
    size_t currentOffset = 0;

    while (sourceStructureTypeHeader)
    {
        targetStructureTypeHeader = (VkTsStructureTypeHeader*) &data[currentOffset];

        currentSize = commonGetStructureTypeSize(sourceStructureTypeHeader);

        memcpy(targetStructureTypeHeader, sourceStructureTypeHeader, currentSize);

        currentOffset += currentSize;

        if (sourceStructureTypeHeader->pNext)
        {
            targetStructureTypeHeader->pNext = &data[currentOffset];
        }

        sourceStructureTypeHeader = (const VkTsStructureTypeHeader*) sourceStructureTypeHeader->pNext;
    }

    return binaryBufferCreate(&data[0], totalSize);
}
コード例 #3
0
ファイル: fn_binary_buffer.cpp プロジェクト: Asmodean-/Vulkan
IBinaryBufferSP VKTS_APIENTRY binaryBufferCreate(const uint8_t* data, const size_t size)
{
    if (!data || size == 0)
    {
        return IBinaryBufferSP();
    }

    auto result = IBinaryBufferSP(new BinaryBuffer(data, size));

	if (result.get() && result->getSize() != size)
	{
		return IBinaryBufferSP();
	}

    return result;
}
コード例 #4
0
ファイル: ImageData.cpp プロジェクト: YoutaVen/Vulkan
ImageData::ImageData(const std::string& name, const VkImageType imageType, const VkFormat& format, const VkExtent3D& extent, const uint32_t mipLevels, const uint8_t* data, const size_t size) :
    IImageData(), name(name), imageType(imageType), format(format), extent(extent), mipLevels(mipLevels)
{
    buffer = IBinaryBufferSP(new BinaryBuffer(data, size));

    if (!buffer.get() || !buffer->getData())
    {
        reset();
    }

    UNORM = commonIsUNORM(format);
    SFLOAT = commonIsSFLOAT(format);
    bytesPerChannel = commonGetBytesPerChannel(format);
    numberChannels = commonGetNumberChannels(format);
}
コード例 #5
0
ファイル: fn_file.cpp プロジェクト: YoutaVen/Vulkan
IBinaryBufferSP VKTS_APIENTRY fileLoadBinary(const char* filename)
{
    if (!filename)
    {
        return IBinaryBufferSP();
    }

    //

    if (!_filePrepareLoadBinary(filename))
    {
    	return IBinaryBufferSP();
    }

    //

    FILE* file;

    std::string loadFilename = g_baseDirectory + std::string(filename);

    //

    file = fopen(loadFilename.c_str(), "rb");

    if (!file)
    {
        return IBinaryBufferSP();
    }

    if (fseek(file, 0, SEEK_END))
    {
        fclose(file);

        return IBinaryBufferSP();
    }

    int64_t length = ftell(file);

    if (length < 0)
    {
        fclose(file);

        return IBinaryBufferSP();
    }

    size_t size = static_cast<size_t>(length);

    if (size == 0)
    {
        fclose(file);

        return IBinaryBufferSP();
    }

    auto data = new uint8_t[size];

    if (!data)
    {
        fclose(file);

        return IBinaryBufferSP();
    }

    memset(data, 0, size);

    rewind(file);

    auto elementsRead = fread(data, 1, size, file);

    if (elementsRead != size)
    {
        delete[] data;

        fclose(file);

        return IBinaryBufferSP();
    }

    fclose(file);

    auto buffer = IBinaryBufferSP(new BinaryBuffer(data, size));

    delete[] data;

    return buffer;
}