-
+162
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
#ifdef _WIN32
#define BEGIN_ASM
#define END_ASM
#define _DB(a) __asm _emit a
#define _STR(a) a
#else
#define BEGIN_ASM asm (
#define END_ASM );
#define _DB(a) ".byte "#a";"
#define _STR(a) a" \n\t"
#endif
#define PARAMETERS_ESP_VOID_VOID_VOID BEGIN_ASM _STR(_DB(0x8B) _DB(0x44) _DB(0x24) _DB(0x04)) _STR(_DB(0x8B) _DB(0x54) _DB(0x24) _DB(0x08)) \
_STR(_DB(0x8B) _DB(0x4C) _DB(0x24) _DB(0x0C)) END_ASM
#define SAVE_3_PARAMETERS BEGIN_ASM _STR(_DB(0x89) _DB(0x44) _DB(0x24) _DB(0xE4)) _STR(_DB(0x89) _DB(0x54) _DB(0x24) _DB(0xEC)) \
_STR(_DB(0x89) _DB(0x4C) _DB(0x24) _DB(0xE8)) END_ASM
#define LOAD_3_PARAMETERS BEGIN_ASM _STR(_DB(0x8B) _DB(0x44) _DB(0x24) _DB(0xE4)) _STR(_DB(0x8B) _DB(0x54) _DB(0x24) _DB(0xEC)) \
_STR(_DB(0x8B) _DB(0x4C) _DB(0x24) _DB(0xE8)) END_ASM
int rdtc()
{
_asm RDTSC
}
#pragma optimize( "gtp", on )
#define VECTORP2DADDFPU \
BEGIN_ASM \
_STR(_DB(0xD9) _DB(0x00)) \
_STR(_DB(0xD8) _DB(0x02)) \
_STR(_DB(0xD9) _DB(0x19)) \
_STR(_DB(0xD9) _DB(0x40) _DB(0x04)) \
_STR(_DB(0xD8) _DB(0x42) _DB(0x04)) \
_STR(_DB(0xD9) _DB(0x59) _DB(0x04)) \
END_ASM
void __stdcall __VectorP2DAddFPU() {
VECTORP2DADDFPU;
}
// для даной функции компилятор сам зделает так чтобы использовались другие регистры процессора в место eax edx ecx и сохранения не понадобится
#define Vector2DAdd(x,y,z) _asm lea eax,x _asm lea edx,y _asm lea ecx,z _asm call __VectorP2DAddFPU;
void __stdcall _VectorP2DAddFPU(void *,void *,void *) {
// сохранение в данном случае вызывается в ручную так как сам компилятор этого не зделает что приведет к не предвиденниму результату или к подению
SAVE_3_PARAMETERS;
PARAMETERS_ESP_VOID_VOID_VOID;
VECTORP2DADDFPU;
LOAD_3_PARAMETERS;
}
http://www.gamedev.ru/code/forum/?id=152492#m3
>стоит ли писать велосипед, реализующий математику подобным образом?
CPPGovno,
18 Сентября 2011
-
+158
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
std::ostringstream str;
str << "Русский текст" << std::endl;
Print(str.c_str());
//Оттуда же:
void ConsoleCout(const char* _text)
{
char* buffer=0;
unsigned int bufferSize=0;
if(!_text) return;
while(_text[bufferSize]) bufferSize++;
buffer=new (std::nothrow) char[bufferSize+1];
if(!buffer) return;
buffer[bufferSize]=0;
if(!CharToOemA(_text,buffer))
{
delete[] buffer;
return;
}
std::cout<<buffer;
delete[] buffer;
}
[code]http://www.gamedev.ru/code/forum/?id=152499[\code]
CPPGovno,
18 Сентября 2011
-
+149
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
for(int i=0;i<size1;i+=4)
{
float4 boxMax(plist[i+0].Box().vmax[axis], plist[i+1].Box().vmax[axis], plist[i+2].Box().vmax[axis], plist[i+3].Box().vmax[axis]);
float4 boxMin(plist[i+0].Box().vmin[axis], plist[i+1].Box().vmin[axis], plist[i+2].Box().vmin[axis], plist[i+3].Box().vmin[axis]);
register __m128 a = _mm_and_ps(_mm_cmplt_ps(boxMax, vSplit), one);
register __m128 b = _mm_and_ps(_mm_cmpgt_ps(boxMin, vSplit), one);
register __m128 left = _mm_sub_ps(one, b); // left = 1 - b; same as not(b)
register __m128 right = _mm_sub_ps(one, a); // right = 1 - a; same as not(a)
summLeft += (left.m128_i32[0] + left.m128_i32[1] + left.m128_i32[2] + left.m128_i32[3]);
summRight+= (right.m128_i32[0] + right.m128_i32[1] + right.m128_i32[2] + right.m128_i32[3]);
}
http://www.gamedev.ru/code/forum/?id=141592
История про то, как Пятачок оптимизировал простой цикл:
for(int i=0;i<plist.size();i++)
{
if(plist[i].Box().vmax[axis] < split)
summLeft++;
else if(plist[i].Box().vmin[axis] > split)
summRight++;
else
{
summLeft++;
summRight++;
}
}
CPPGovno,
18 Сентября 2011
-
+157
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
class SOME_CLASS
{
public:
struct
{
inline uintb operator = (uintb newValue )
{
(reinterpret_cast<SOME_CLASS*>(static_cast<char*>(this)-offsetof(SOME_CLASS,SOME_CLASS::i)))->_setI( newValue );
}
inline operator uintb ()
{
return (reinterpret_cast<SOME_CLASS*>(static_cast<char*>(this)-offsetof(SOME_CLASS,SOME_CLASS::i)))->_i;
}
...
...
} i;
...
private:
void _setI( uintb newValue );
uintb _i;
}
http://www.gamedev.ru/code/forum/?id=152459#m1
>P.S. обязательно поставить + на govnokod.ru.
CPPGovno,
16 Сентября 2011
-
+158
- 1
boost::weak_ptr<std::queue<std::vector<boost::shared_ptr<sf::Drawable>>>> _frame_queue;
очередь кадров которые поток с игровой логикой скармливает потоку ответственному за рендеринг
tymofey,
15 Сентября 2011
-
+171
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
char *f(char *s1, ...)
{ char **cp = &s1; //--адрес первого указателя
int len = 0;
// цикл для определения общей длины сцепляемых строк
while (*cp) { len += strlen(*cp); cp++; }
char *s = new char[len+1]; //--память для строки
s[0]=0; //-- "очищаем" строку
// цикл для сцепления строк
cp=&s1; //-- опять установка на 1-й параметр
while (*cp)
{ strcat(s, *cp); //-- прицепляем первую (и следующие)
cp++; //-- перемещаемся на следующую
}
return s;
}
Сцепление строк (ноль в конце)
http://www.rsdn.ru/forum/cpp/418970.1.aspx
rat4,
14 Сентября 2011
-
+162
- 1
- 2
- 3
- 4
- 5
void IniRead(UnicodeString Name, int n)
{
TStringList* lst=new TStringList;
Ini->WriteString("CardNames","Card"+(UnicodeString)n,Name);
}
чувак создал переменную lst просто так, для теплоты душевной. ну хотелось ему чтоб создался stringlist!
phys-tech,
14 Сентября 2011
-
+167
- 1
- 2
- 3
- 4
- 5
- 6
- 7
[code=cpp]
#include <iostream.h>
void main(void)
{
cout << Заключайте сообщение в кавычки;
}
[/code]
http://programmersclub.ru/01/
ReallyBugMeNot,
12 Сентября 2011
-
+163
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
/*
См. маткад файл по нерекурсивным цифровым фильтрам.
Рачёт дискретной последовательности отфильтрованного сигнала
У меня то в файликах уже значения, функции нету,а в маткаде такая строка
lpf(k)*x(Ta*(n-k)) - дык тут идёт расчёт функции х(т). Идея!!!
*барабанная дробь*
Сигнал повторяется с периодом 2Пи, тем более данный сигнал
парный. Знач делаем следующее
1. Вычисляем Step = |Ta*(n-k)|.
2. Так как сигнал парный и симетричный на отрезке 2Пи
то значение функции в Step = |step - 2*ПИ| тоже самое, что и
значение функции в Step. Зачем такой геморой? Ибо в файле step.dat
хначения идут до 2*Пи, тобишь до 6.283
3. В файле data.dat на строке Step ищем искомое нам значение,
по сути тоже самое, что и x(Ta*(n-k)), где х - сигнал.
Сл. функция и возвращает значение Step = |step - 2*ПИ|
*/
int FindStep(int k)
{
float step = fabs(fabs((Ta * k)) - 6.283); // (n-k) in main program
return step*1000;
}
Комментарий умилил
denis90,
12 Сентября 2011
-
+146
- 1
- 2
- 3
- 4
void crash()
{
(( void(*)() )0)();
}
Good crash :D
petersvp,
11 Сентября 2011