Add files

This commit is contained in:
2025-01-29 10:55:49 +01:00
commit 98fba39c36
1017 changed files with 403715 additions and 0 deletions

View File

@ -0,0 +1,110 @@
#include <kinc/graphics4/texture.h>
#include <kinc/io/filereader.h>
#include <kinc/backend/SystemMicrosoft.h>
#include "Direct3D9.h"
namespace {
kinc_g4_texture_t *setTextures[16] = {nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr};
D3DFORMAT convert(kinc_image_format_t format) {
switch (format) {
case KINC_IMAGE_FORMAT_RGBA32:
default:
return D3DFMT_A8R8G8B8;
case KINC_IMAGE_FORMAT_GREY8:
return D3DFMT_L8;
}
}
}
void kinc_g4_texture_init_from_image(kinc_g4_texture_t *texture, kinc_image_t *image) {
texture->impl.stage = 0;
texture->impl.mipmap = true;
DWORD usage = 0;
texture->tex_width = image->width;
texture->tex_height = image->height;
texture->tex_depth = 1;
usage = D3DUSAGE_DYNAMIC;
kinc_microsoft_affirm_message(
device->CreateTexture(image->width, image->height, 1, usage, convert(image->format), D3DPOOL_DEFAULT, &texture->impl.texture, 0),
"Texture creation failed.");
D3DLOCKED_RECT rect;
kinc_microsoft_affirm(texture->impl.texture->LockRect(0, &rect, 0, 0));
texture->impl.pitch = rect.Pitch;
uint8_t *from = (uint8_t *)image->data;
uint8_t *to = (uint8_t *)rect.pBits;
// memcpy(to, from, width * height * sizeOf(format));
for (int y = 0; y < image->height; ++y) {
for (int x = 0; x < image->width; ++x) {
to[rect.Pitch * y + x * 4 + 0 /* blue*/] = (from[y * image->width * 4 + x * 4 + 2]); /// 255.0f;
to[rect.Pitch * y + x * 4 + 1 /*green*/] = (from[y * image->width * 4 + x * 4 + 1]); /// 255.0f;
to[rect.Pitch * y + x * 4 + 2 /* red*/] = (from[y * image->width * 4 + x * 4 + 0]); /// 255.0f;
to[rect.Pitch * y + x * 4 + 3 /*alpha*/] = (from[y * image->width * 4 + x * 4 + 3]); /// 255.0f;
}
}
kinc_microsoft_affirm(texture->impl.texture->UnlockRect(0));
}
void kinc_g4_texture_init3d(kinc_g4_texture_t *texture, int width, int height, int depth, kinc_image_format_t format) {}
void kinc_g4_texture_init(kinc_g4_texture_t *texture, int width, int height, kinc_image_format_t format) {
texture->impl.stage = 0;
texture->impl.mipmap = true;
DWORD usage = 0;
texture->tex_width = width;
texture->tex_height = height;
texture->tex_depth = 1;
usage = D3DUSAGE_DYNAMIC;
kinc_microsoft_affirm_message(device->CreateTexture(width, height, 1, usage, convert(format), D3DPOOL_DEFAULT, &texture->impl.texture, 0),
"Texture creation failed.");
}
void kinc_g4_texture_destroy(kinc_g4_texture_t *texture) {
kinc_internal_texture_unset(texture);
texture->impl.texture->Release();
}
#ifdef KINC_KONG
void kinc_internal_texture_set(kinc_g4_texture_t *texture, uint32_t unit) {
kinc_microsoft_affirm(device->SetTexture(unit, texture->impl.texture));
texture->impl.stage = unit;
setTextures[texture->impl.stage] = texture;
}
#else
void kinc_internal_texture_set(kinc_g4_texture_t *texture, kinc_g4_texture_unit_t unit) {
kinc_microsoft_affirm(device->SetTexture(unit.stages[KINC_G4_SHADER_TYPE_FRAGMENT], texture->impl.texture));
texture->impl.stage = unit.stages[KINC_G4_SHADER_TYPE_FRAGMENT];
setTextures[texture->impl.stage] = texture;
}
#endif
void kinc_internal_texture_unset(struct kinc_g4_texture *texture) {
if (setTextures[texture->impl.stage] == texture) {
device->SetTexture(texture->impl.stage, nullptr);
setTextures[texture->impl.stage] = nullptr;
}
}
unsigned char *kinc_g4_texture_lock(kinc_g4_texture_t *texture) {
D3DLOCKED_RECT rect;
kinc_microsoft_affirm(texture->impl.texture->LockRect(0, &rect, 0, 0));
texture->impl.pitch = rect.Pitch;
return (uint8_t *)rect.pBits;
}
void kinc_g4_texture_unlock(kinc_g4_texture_t *texture) {
kinc_microsoft_affirm(texture->impl.texture->UnlockRect(0));
}
void kinc_g4_texture_clear(kinc_g4_texture_t *texture, int x, int y, int z, int width, int height, int depth, unsigned color) {}
int kinc_g4_texture_stride(kinc_g4_texture_t *texture) {
return texture->impl.pitch;
}
void kinc_g4_texture_generate_mipmaps(kinc_g4_texture_t *texture, int levels) {}
void kinc_g4_texture_set_mipmap(kinc_g4_texture_t *texture, kinc_image_t *mipmap, int level) {}