2015-10-15 7 views
1

Есть ли способ использовать свою собственную sin и cos функцию вместо ::std::sin и ::std::cos в glm::rotate(...) звонках?Использования «обычай» грех и потому в GLM :: вращается

Единственный способ, которым я могу думать, используют макросы для замены sin и cos символов внутри std имен, но я действительно не хотел бы, чтобы сделать это.

+0

Почему? Недавно изменилось определение 'sin' или' cos'? Вы действительно думаете, что можете сделать лучше, чем стандартная библиотека? На каких основаниях? – EJP

+1

@EJP: Я нахожу эти комментарии раздражающими - я не хочу нападать на вас, но каждый раз, когда я задаю очень «низкий уровень» вопрос оптимизации, кто-то всегда игнорирует этот вопрос и просто говорит «не делайте этого». Я экспериментирую с рассылкой спрайтов и критичными по производительности циклами, и я хотел бы измерить разницу в производительности между использованием (таблица с синтезированным + cos), (таблица sin/cos) и (std sin cos). Нет, определения sin и cos не изменились недавно. Нет, я не думаю, что смогу «лучше, чем стандартная библиотека». Я просто хотел поэкспериментировать и измерить –

+0

Возможно, вы искренне интересовались моими мотивами, но ваш комментарий дал мне впечатление * «Посмотрите, еще один чувак, который глупо думает, что он может сделать лучше, чем стандартная библиотека!» * –

ответ

3

Использование предварительной загрузки LD будет работать.

Я объясню небольшим примером.

Предположим, что это наш основной код ...

int main() 
{ 
    std::cout<< std::sin(1000); 
    return 0; 
} 

если я скомпилировать и запустить его, он должен напечатать 0,82688

Теперь я определяю мой собственный грех

mysin.hpp

extern "C" 
{ 
    double sin(double); 
} 

mysin.cpp

#include "mysin.hpp" 

double sin(double in) 
{ 
    return in + 10;//do you computation here 
} 

Теперь скомпилировать его в качестве общей Lib

g++ -O2 -c -fPIC mysin.cpp -o mysin.o 
g++ -shared -Wl,-soname,libmysin.so mysin.o -o libmysin.so 

Если предположить, что оригинальная программа компилируется как "a.out". Запустите его с нашей предварительной загрузкой lib

LD_PRELOAD=./libmysin.so ./a.out 

Теперь результатом будет «1010».