vault backup: 2025-04-20 00:05:45

This commit is contained in:
sShemet
2025-04-20 00:05:45 +05:00
parent b5be54f719
commit af241b4e09
4 changed files with 84 additions and 4 deletions

View File

@@ -41,12 +41,12 @@
"state": {
"type": "markdown",
"state": {
"file": "PERSONAL PROJECTS/P2EP/pseudoCode/Untitled.md",
"file": "PERSONAL PROJECTS/P2EP/pseudoCode/FUN_80012df4 RenderInterface.md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "Untitled"
"title": "FUN_80012df4 RenderInterface"
}
}
],
@@ -207,8 +207,8 @@
},
"active": "dd912cc876184c4f",
"lastOpenFiles": [
"PERSONAL PROJECTS/P2EP/pseudoCode/RenderInterface.md",
"PERSONAL PROJECTS/P2EP/pseudoCode/Untitled.md",
"PERSONAL PROJECTS/P2EP/pseudoCode/FUN_80011f2c InitInterfaceManager.md",
"PERSONAL PROJECTS/P2EP/pseudoCode/FUN_80012df4 RenderInterface.md",
"PERSONAL PROJECTS/PS1 DOCS/PS1 IRQ.md",
"PERSONAL PROJECTS/P2EP/pseudoCode",
"PERSONAL PROJECTS/PS1 DOCS/Untitled",

View File

@@ -0,0 +1,80 @@
``` c
#include <libgte.h>
#include <libgpu.h>
/* Структура данных интерфейса */
typedef struct {
int max_elements; // Максимальное количество элементов (param_2)
int version_flag; // Флаг версии (инициализируется 1)
int element_size; // Размер элемента (0x15 слов)
void* render_callback; // Функция рендеринга (LAB_8001399c)
int* element_array; // Массив элементов
int* texture_data; // Данные текстур (param_3)
int* palette_data; // Данные палитры (param_4)
} InterfaceManager;
/* Глобальный указатель на менеджер */
InterfaceManager* g_InterfaceMgr = (InterfaceManager*)0x8007CB34;
/* Инициализация менеджера интерфейса */
void InitInterfaceManager(int* manager_ptr, int max_elements, int texture_data, int palette_data)
{
/* Инициализация базовых полей */
g_InterfaceMgr = (InterfaceManager*)manager_ptr;
g_InterfaceMgr->max_elements = max_elements;
g_InterfaceMgr->version_flag = 1;
/* Вызов внутренней функции инициализации */
InitInterfaceInternal();
/* Инициализация элементов */
for(int i = 0; i < max_elements; i++) {
InterfaceElement* elem = GetInterfaceElement(i);
elem->index = i;
elem->state = 0xFFFF; // Изначально неактивен
}
/* Обработка графических данных */
if(texture_data != 0) {
g_InterfaceMgr->texture_data = (int*)texture_data;
g_InterfaceMgr->palette_data = (int*)(texture_data + palette_data * 4);
for(int i = 0; i < max_elements; i++) {
InterfaceElement* elem = GetInterfaceElement(i);
elem->texture_ptr = texture_data;
elem->palette_ptr = texture_data + palette_data * 4;
}
} else {
/* Режим без текстур */
for(int i = 0; i < max_elements; i++) {
InterfaceElement* elem = GetInterfaceElement(i);
elem->flags |= 0x1000; // Устанавливаем флаг "без текстуры"
}
}
/* Инициализация callback-функции */
g_InterfaceMgr->render_callback = &DefaultRenderCallback;
/* Сброс дополнительных параметров */
for(int i = 0; i < 4; i++) {
g_InterfaceMgr->unused_params[i] = 0;
}
/* Глобальный флаг */
g_GlobalFlag = 0;
}
/* Вспомогательные функции */
InterfaceElement* GetInterfaceElement(int index) {
return (InterfaceElement*)((char*)g_InterfaceMgr->element_array +
index * sizeof(InterfaceElement));
}
void InitInterfaceInternal() {
/* ... реализация FUN_80012084 ... */
}
void DefaultRenderCallback() {
/* ... реализация LAB_8001399c ... */
}
```