Podczas debugowania mojego systemu odkryłem, że wszystkie używane przeze mnie shadery nigdy nie zostały skompilowane. Wszystkie programy GLSL były szczęśliwie połączone i działały jak czar.Czy opcja glCompileShader jest opcjonalna?
Przeszukałem całą bazę kodu dla połączeń pod numer glCompileShader
, ale nie znaleziono.
Moje pytanie brzmi: czy jest to specyficzne zachowanie implementacji, nad którą pracuję? Czy kompilacja modułu cieniującego jest wykonywana niejawnie podczas łączenia programu? Czy to opcjonalne? Jeśli tak jest, jakie są zalety tego działania, poza pobieraniem dziennika błędów?
Nie mogłem znaleźć żadnej sprawy takiej jak moja w dokumentacji, jeśli coś przeoczyłem, czy możesz wskazać mi to?
Mój sprzedawca jest NVIDIA (kierowca 337,88)
EDIT: Również jestem NIE korzystając glCreateShaderProgram()
, ale po prostu glCreateProgram()
do tworzenia programów cieniujących.
Jaki jest twój "GL_VENDOR"? – genpfault
@genpfault Przykro mi, ale jestem pewien, że umieściłem go w tekście pytania, dodałem go teraz. – cifz
Nie powinno działać w ten sposób, ale jest jeden sposób, który przychodzi mi na myśl od razu, co pozwoli ci pominąć kompilację obiektów shaderów . Nowsze wersje GL umożliwiają ładowanie wstępnie połączonych plików binarnych programu; Szczerze wątpię, że to właśnie dzieje się w twojej bazie kodu, ponieważ nie neguje to potrzeby kompilowania/łączenia programów przynajmniej raz na początku, a potem znowu, gdy zmienia się sterownik/sprzęt. Zasadniczo jest to przydatne do buforowania połączonych programów, aby skrócić czas ładowania przyszłych wykonań i na pewno wiesz, czy twoje oprogramowanie zostało zaprojektowane do pracy w ten sposób. –