All streams
Search
Write a publication
Pull to refresh
12
0
Дима Ховрин @stalker320

Разработчик игр

Send message

Всё конечно классно переведено, но я начинаю понимать, что довольно запарно всё это создавать...

Делюсь make-комбайном по компиляции GLSL в SPIR-V

Прим:

  1. Замените glslc в коде ниже на путь (Я просто воткнул /home/stalker320/VulkanSDK/1.3.290.0/x86_64/bin в переменную PATH в начало)

  2. Поместите ниже приведённый Makefile в папку shaders

  3. Поместите шейдеры в папку shaders/src и создайте папку shaders/bin. Пути зависят от SRCPREFIX и OBJPREFIX

  4. называйте файлы следующим образом: filename.stage.glsl, где stage - это vert, vertex, frag, fragment и прочие стадии пайплайна

  5. Выполните make all для исполнения

  6. Выполните make clear для очистки

COMPILER = glslc

SRCPREFIX=src
OBJPREFIX=bin
SLSUFFIX=glsl

SOURCES = $(wildcard $(SRCPREFIX)/*.$(SLSUFFIX)) $(wildcard $(SRCPREFIX)/*.$(SLSUFFIX))
OBJECTS = $(patsubst $(SRCPREFIX)/%.$(SLSUFFIX),$(OBJPREFIX)/%.spv,$(SOURCES))

$(OBJPREFIX)/%.spv: $(SRCPREFIX)/%.$(SLSUFFIX)
	${COMPILER} -fshader-stage=$(patsubst $(SRCPREFIX)/$(basename $(basename $(notdir $<))).%,%,$(patsubst %.$(SLSUFFIX),%,$<)) $< -o $@

.PHONY: all clean

all: $(OBJECTS)

clean:
	rm $(OBJPREFIX)/*.spv

UPD: исправил для поддержки hlsl (сделал суффикс изменяемым)

Ты и пользователи github. А вообще те, кто будет писать компилятор к твоему языку программирования

Ну смотри: str - это тип, а str() - это создание объекта str. При использовании подсказок типов ты пишешь

x: str = "Hello world"
num: str = str(8)

А __str__ необходим для добавления в варианты того, что можно подставить в конструктор.

А decode - это для работы с байтами.

Генитальный кусок кода

Ты прямо серьёзно, или "гениальный" кусок "кода"?

Я не употреблял и не собираюсь пробовать, что либо воздействующее серьёзно на мозг, однако ближе к полуночи я пробуждаюсь под светом тёмной темы и пишу код лучше, а утром не очень понимаю как я это вообще смог придумать такой алгоритм.

Ну не знаю даже... Вынести вспомогательные функции в отдельные курсы, которые идут дополнением к уроку, не, или ссылаясь на существующие "как сделать"? К примеру мне нравится Си, хотя я приведу куда более красивый пример: Rust. Вот запрос "Нейросеть на Rust-lang" даёт следующее количество результатов: 0 по теме, +- 10 результатов про "использование нейросети в rust(игре)", +- 20 результатов про реализацию с помощью библиотек на python, +- 5 результатов с чистой математикой и слоганом "простыми словами" (лишь слоганом), при поиске в "duckduckgo". А я не хочу ковыряться тысячи часов в исходниках библиотеки tensorflow на python, чтобы написать необходимую мне библиотеку. Вот мне и нужно это +- простое объяснение, чтобы сделать то, что я желаю, или хотя бы адаптировать под свои нужды. Вот про что я могу сказать, что помогло, так это ролик про перцептрон от IT_Школьника, код которого я переписал на Rust и создав 1 рабочий слой, который даже работал. Я заинтересован в создании конвейеров нейросетей, но хочу использовать хоть немного чужого опыта, чтобы не начинать полностью с нуля.

UPD: Простите, если моё сообщение не в тему, просто вечный поиск мне немного надоел. Если есть что почитать полезного про создание нейросети на Rust, то прошу посоветуйте, не откажусь от помощи.

Слушай, вот ты ближе всего к сегодня написал: как ты понял, в производную функции активации передавать надо что?

А где что-то вроде этого потерялось?

with app.app_context():
  db.create_all()

Или это из новой версии?

Я думаю мы всегда просто неправильно понимали using namespace, я вот нашёл интересный вариант использования в gdextension для C++. Вот моя интерпретация этого подхода:

// prog.hpp
#ifndef PROG_HPP
#define PROG_HPP

namespace myns {
  class MyClass {
    MyClass();
    ~MyClass();
  };
} // namespace myns

#endif
// prog.cpp
#include "prog.hpp"

using namespace myns;

MyClass::MyClass() {}
MyClass::~MyClass() {}

Вместо

#include "prog.hpp"

myns::MyClass::MyClass() {}
myns::MyClass::~MyClass() {}

Или даже некого

myns::mytype myns::MyClass::sum(
  myns::mytype a,
  myns::mytype b
) {}

Мне кажется это громоздко, хотя если твой подход программирования предусматривает использование using, то это будет выглядеть как-то так, что мне тоже кажется уместным:

#include "prog.hpp"
#include "mytypedef.hpp"

using myns::MyClass;
using myns::mytype;

MyClass::MyClass() {}
MyClass::~MyClass() {}

mytype MyClass::sum(mytype a, mytype b) {}

А корень вышел 2,969848...

В майнкрафте теперь трёхмерный шум Перлина* до какой-то версии использовался двухмерный.

В крайнем случае можно использовать if/else if

Короче твой смайлик отвалился...

В случае с вектором лучше возвращать "ссылку" на элемент, чем его значение

Это вполне легко сделать, но для меня это показалось избыточным, когда нужно было просто достать значение элемента.

Спасибо, учту. Думаю я даже могу найти применение этому теперь.

  1. То есть адрес указателя int* ptr; будет храниться в стеке, в то время, как в хипе будут храниться сами данные?

про packed-структуры слышал, но по мне так это какая-то шляпа, тем более наличие свободных байтов во время тестов структур позволяет их более плотно упорядочить простой перестановкой строк типов, хотя наверное я просто не сталкивался с необходимостью в их упаковке...

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity

Specialization

Software Developer, Game Developer
Git
Python
OOP
Linux
Java