Saran Temat założony przez niniejszego użytkownika |
» 2017-01-30 20:34:44 Debugger pokazuje na tą linijkę: #0 ?? ?? () #1 0x43e571 G<void (*)(unsigned int) <----- f( std::forward < Args >( args )...); #2 0x401914 Shader::Shader(this=0x28fedc, dir_vert_shader=0x4b0187 <std::piecewise_construct+351> "glsl\basic.vert", dir_frag_shader=0x4b0178 <std::piecewise_construct+336> "glsl\basic.frag") #3 0x401e3e main() Kod: http://wklej.org/hash/cfa65ef16d3/ (shadery niepotrzebne, na razie i tak mam problem z ich wczytywaniem) |
|
jankowalski25 |
» 2017-01-31 11:29:21 glDeleteShader( vert_shader )( frag_shader ); |
auto delete_shaders = make( glDeleteShader );
delete_shaders( vert_shader )( frag_shader ); |
Co zyskujesz stosując drugie podejście zamiast pierwszego? |
|
Saran Temat założony przez niniejszego użytkownika |
» 2017-01-31 11:46:31 No glDeleteShader( vert_shader )( frag_shader ); raczej nie jest poprawne. Normalnie musiałbym pisać glDeleteShader( vert_shader ); glDeleteShader( frag_shader ); PS. ktoś ten temat do działu "Inne" mógłby przenieść? |
|
jankowalski25 |
» 2017-01-31 15:04:00 To zrób sobie zwykłą dwuargumentową funkcję i później ją wywołuj. Zwłaszcza, jeśli kolejność wywołań ma znaczenie (zgaduję, że to jest przyczyną problemu). Chyba, że chcesz obsługiwać bardziej ogólne przypadki. | PS. ktoś ten temat do działu "Inne" mógłby przenieść? |
Ja nie mogę, więc nie przeniosę. Wbrew pozorom ci, którzy wchodzą w "Ostatnio na forum" zamiast na stronę główną forum, prawie wcale się nie przejmują, w jakim dziale jest dany temat (zwłaszcza, jeśli ikonka pozostaje ta sama). |
|
Saran Temat założony przez niniejszego użytkownika |
» 2017-01-31 16:21:25 | To zrób sobie zwykłą dwuargumentową funkcję i później ją wywołuj. Zwłaszcza, jeśli kolejność wywołań ma znaczenie (zgaduję, że to jest przyczyną problemu). Chyba, że chcesz obsługiwać bardziej ogólne przypadki. |
Niee, to byłby przerost formy nad treścią. No i bardziej ogólne przypadki. |
|
michal11 |
» 2017-01-31 16:53:02 Na początku chciałem użyć std::initializer_list ale ona może trzymać tylko const wartości (a wygląda na to, że ty musisz przesyłać referencje dlatego napisałem coś takiego: #include <iostream> #include <vector> #include <functional>
template < typename T > using RefVector = std::vector < std::reference_wrapper < T >>;
template < typename T, class Function > void DeleteShaders( RefVector < T >&& params, Function fun ) { for( T & el: params ) { fun( el ); } }
void Printer( int id ) { std::cout << id << std::endl; }
int main() { int a = 1, b = 2, c = 3, d = 4; DeleteShaders( RefVector < int >( { a, b, c, d } ),[]( int & arg ) { arg *= 10; } ); DeleteShaders( RefVector < int >( { a, b, c, d } ), Printer ); return 0; }
w twoim kodzie wykorzystałbym to tak DeleteShaders( RefVector < GLuint >( { vert_shader, frag_shader } ), glDeleteShader ); masz zachowaną kolejność wywoływania argumentów oraz wszystko w jednej linii. |
|
| 1 « 2 » |