Jump to content

Recommended Posts

Posted
-- Configuración mínima
local displays = GetDisplays()
local window = CreateWindow("Leadwerks", 0, 0, 1280, 720, displays[1], WINDOW_CENTER | WINDOW_TITLEBAR)
local framebuffer = CreateFramebuffer(window)
local world = CreateWorld()
local camera = CreateCamera(world)
camera:SetClearColor(0.125)
camera:SetPosition(0, 0, -2)

Print("=== CARGA DIRECTA DESDE BUFFER ===")

-- 1. Cargar archivo completo a buffer
Print("1. LoadBuffer('Maps/Mars.map')...")
local buffer = LoadBuffer("Maps/Mars.map")
if buffer == nil then
    Print("Error: LoadBuffer falló")
    return
end
Print("   Buffer: " .. buffer:GetSize() .. " bytes")

-- 2. Crear BufferStream desde el buffer
Print("2. CreateBufferStream(buffer)...")
local stream = CreateBufferStream(buffer)
if stream == nil then
    Print("Error: No se pudo crear stream")
    return
end

-- 3. Crear binstream vacío (requerido por LoadScene)
Print("3. Creando binstream...")
local binstream = CreateBufferStream()

-- 4. Intentar carga directa desde buffer
Print("4. LoadScene(world, stream, binstream)...")
stream:Seek(0)
binstream:Seek(0)
local scene = LoadScene(world, stream, binstream)

if scene == nil then
    Print(" FALLO: No se pudo cargar desde buffer")
else
    Print(" ÉXITO: Escena cargada directamente desde buffer")
end

-- Loop mínimo
while window:KeyDown(KEY_ESCAPE) == false and window:Closed() == false do
    world:Update()
    world:Render(framebuffer)
end

The entire file enters the buffer.

Print("=== CARGA COMPLETA DE ARCHIVO A BUFFER ===")

-- 1. Cargar archivo COMPLETO con LoadBuffer
Print("1. Cargando archivo con LoadBuffer...")
local buffer = LoadBuffer("Maps/Mars.map")

if buffer == nil then
    Print(" LoadBuffer falló - el archivo no se pudo cargar")
    return
end

local bufferSize = buffer:GetSize()
Print(" Buffer creado: " .. bufferSize .. " bytes")

-- 2. Mostrar información general
Print("\n2. Información del buffer:")
Print("   - Tamaño total: " .. bufferSize .. " bytes")
Print("   - Primer byte: " .. buffer:PeekByte(0) .. " (ASCII: " .. string.char(buffer:PeekByte(0)) .. ")")
Print("   - Último byte: " .. buffer:PeekByte(bufferSize-1))

-- 3. Mostrar los primeros 500 bytes (como texto y hex)
Print("\n3. Primeros 500 bytes del archivo:")
local textPreview = ""
local hexPreview = ""
for i = 0, math.min(499, bufferSize-1) do
    local byte = buffer:PeekByte(i)
    
    -- Versión texto (solo caracteres imprimibles)
    if byte >= 32 and byte <= 126 then
        textPreview = textPreview .. string.char(byte)
    else
        textPreview = textPreview .. "."
    end
    
    -- Versión hexadecimal
    hexPreview = hexPreview .. string.format("%02X ", byte)
    if (i+1) % 16 == 0 then
        hexPreview = hexPreview .. "\n"
    end
end

Print("   Como texto (imprimible):")
Print("   " .. textPreview)
Print("\n   En hexadecimal:")
Print("   " .. hexPreview)

-- 4. Mostrar los últimos 500 bytes
Print("\n4. Últimos 500 bytes del archivo:")
if bufferSize > 500 then
    local startPos = bufferSize - 500
    local textEnd = ""
    local hexEnd = ""
    
    for i = startPos, bufferSize-1 do
        local byte = buffer:PeekByte(i)
        
        if byte >= 32 and byte <= 126 then
            textEnd = textEnd .. string.char(byte)
        else
            textEnd = textEnd .. "."
        end
        
        hexEnd = hexEnd .. string.format("%02X ", byte - startPos)
        if (i - startPos + 1) % 16 == 0 then
            hexEnd = hexEnd .. "\n"
        end
    end
    
    Print("   Como texto (imprimible):")
    Print("   " .. textEnd)
else
    Print("   (El archivo es demasiado pequeño para mostrar últimos 500 bytes)")
end

-- 5. Buscar la transición de JSON a datos binarios
Print("\n5. Analizando estructura del archivo:")
local nullByteCount = 0
local jsonEnd = nil

-- Buscar bytes nulos (0x00) que indican datos binarios
for i = 0, math.min(1000, bufferSize-1) do
    if buffer:PeekByte(i) == 0 then
        nullByteCount = nullByteCount + 1
        if jsonEnd == nil then
            jsonEnd = i
            Print("   - Primer byte nulo (0x00) en posición: " .. i)
        end
    end
end

Print("   - Bytes nulos en primeros 1000 bytes: " .. nullByteCount)
Print("   - JSON probablemente termina cerca del byte: " .. (jsonEnd or "no encontrado"))

-- 6. Verificar si es JSON válido
Print("\n6. Verificando si es JSON válido:")
local firstChar = string.char(buffer:PeekByte(0))
local secondChar = string.char(buffer:PeekByte(1))
Print("   - Primeros caracteres: " .. firstChar .. secondChar)

if firstChar == "{" then
    Print("    Comienza con '{' (JSON válido)")
    
    -- Buscar la última llave de cierre
    local lastBrace = -1
    for i = 0, bufferSize-1 do
        if buffer:PeekByte(i) == string.byte("}") then
            lastBrace = i
        end
    end
    
    if lastBrace > 0 then
        Print("   - Última '}' en posición: " .. lastBrace)
        Print("   - Tamaño del JSON: ~" .. (lastBrace + 1) .. " bytes")
        Print("   - Datos binarios después: ~" .. (bufferSize - lastBrace - 1) .. " bytes")
    end
else
    Print("    No comienza con '{' (no es JSON puro)")
end

Print("\n=== ANÁLISIS COMPLETADO ===")


 

 

 

Astrocuco.thumb.png.c76e0fb3de2d6e437e7dca099625e11e.png

Murphy's Law: We don't fix bugs, we document them as features. – Murphy Games

Posted

 

Simplified code, the application crashes in LoadScene.

local displays = GetDisplays()
local window = CreateWindow("Leadwerks", 0, 0, 1280, 720, displays[1], WINDOW_CENTER | WINDOW_TITLEBAR)
local framebuffer = CreateFramebuffer(window)
local world = CreateWorld()
local camera = CreateCamera(world)
camera:SetClearColor(0.125)
camera:SetPosition(0, 0, -2)

local buffer = LoadBuffer("Maps/Mars.map")
local stream = CreateBufferStream(buffer)

local jsonEnd = 0
for i = 0, buffer:GetSize() - 1 do
    if buffer:PeekByte(i) == string.byte('}') then
        jsonEnd = i
    end
end

local jsonStream = CreateStreamBuffer(stream, 0, jsonEnd + 1)
local binstream = CreateStreamBuffer(stream, jsonEnd + 1, buffer:GetSize() - jsonEnd - 1)

local scene = LoadScene(world, jsonStream, binstream)

while window:KeyDown(KEY_ESCAPE) == false and window:Closed() == false do
    world:Update()
    world:Render(framebuffer)
end

 

 

 

Astrocuco.thumb.png.c76e0fb3de2d6e437e7dca099625e11e.png

Murphy's Law: We don't fix bugs, we document them as features. – Murphy Games

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...