#include "Std140Buffer.h" #include #include #include namespace { int gFailures = 0; void Expect(bool condition, const char* message) { if (condition) return; std::cerr << "FAIL: " << message << "\n"; ++gFailures; } float ReadFloat(const std::vector& buffer, std::size_t offset) { float value = 0.0f; std::memcpy(&value, buffer.data() + offset, sizeof(float)); return value; } int ReadInt(const std::vector& buffer, std::size_t offset) { int value = 0; std::memcpy(&value, buffer.data() + offset, sizeof(int)); return value; } void TestScalarPacking() { std::vector buffer; AppendStd140Float(buffer, 1.25f); AppendStd140Int(buffer, 7); Expect(buffer.size() == 8, "scalar values pack tightly on 4-byte alignment"); Expect(ReadFloat(buffer, 0) == 1.25f, "float value is written at offset 0"); Expect(ReadInt(buffer, 4) == 7, "int value is written at offset 4"); } void TestVectorAlignment() { std::vector buffer; AppendStd140Float(buffer, 1.0f); AppendStd140Vec2(buffer, 2.0f, 3.0f); AppendStd140Vec4(buffer, 4.0f, 5.0f, 6.0f, 7.0f); Expect(buffer.size() == 32, "vec2 aligns to 8 bytes and vec4 aligns to 16 bytes"); Expect(ReadFloat(buffer, 8) == 2.0f, "vec2 x value is aligned"); Expect(ReadFloat(buffer, 12) == 3.0f, "vec2 y value follows x"); Expect(ReadFloat(buffer, 16) == 4.0f, "vec4 x value is aligned"); Expect(ReadFloat(buffer, 28) == 7.0f, "vec4 w value is written"); } } int main() { TestScalarPacking(); TestVectorAlignment(); if (gFailures != 0) { std::cerr << gFailures << " Std140Buffer test failure(s).\n"; return 1; } std::cout << "Std140Buffer tests passed.\n"; return 0; }