... тогда спрошу как токарь токаря, сколько нужно инструкций процессора чтобы визуализировать одну точку? ...
Dim As Integer hor=800, vert=600, count '' определение целых переменныхDim As Double start=Timer '' определение переменных с плавающей точкой ScreenRes (hor, vert, 24) '' установка разрешения окна и глубины (число бит) цвета'' функция получения случайного целого числа в диапозоне 0-255 для одной из компоненты RGB цветаFunction Col As Integer Return Int(Rnd*255)End Function'' функция получения случайного целого числа в диапазоне от 0 до nFunction Poz(n As Integer) As Integer Return Int(Rnd*n)End Function'' главный цикл Do While inkey = "" '' пока не нажата любая клавиша For count = 1 To 1000000 '' повторяем миллион раз PSet (Poz(hor), Poz(vert)), RGB(Col, Col, Col) '' рисуем точку случайным цветом в случайной позиции Next '' выводим время отрисовки миллиона пикселей в заголовок окна WindowTitle "Draw million pixels time: "+Str(Int((Timer-start)*100)/100)+" sec." start=Timer '' присваиваем значение переменной из системного таймераLoop '' продолжаем главный цикл сначала End '' завершение работы
вопрос конкретный,конечно, по пока я его рассматриваю как риторический Итак, вернёмся к нашим "тараканам"...если ещё желание у автора темы не пропало ковырять C++Набросал маленькую программку на FreeBasic:Если есть желание, повтори на C++, LanuHum
повтори на C++, LanuHum
#include <iostream>#include <vector>#include <random>using namespace std;unsigned int hor = 800, vert = 600; // задаём размер изображенияunsigned long pixels = hor * vert; // вычисляем число пикселов vector<unsigned int [4]> image(pixels); // создаём базу данных для чёрного изображенияint main(void) { const int max_value = 255; // указываем максимальную величину цвета unsigned long pixel_number = rand() % pixels; // выбираем случайный пиксел unsigned int r, g, b, a; // объявляем переменные цветов и альфы r = rand() % max_value; // случайный красный g = rand() % max_value; // случайный зелёный b = rand() % max_value; // случайный синий a = rand() % max_value; // случайная альфа image[pixel_number][0] = r; // заменяем в случайно выбранном пикселе чёрной картинки красный image[pixel_number][1] = g; // заменяем в случайно выбранном пикселе чёрной картинки зелёный image[pixel_number][2] = b; // заменяем в случайно выбранном пикселе чёрной картинки синий image[pixel_number][3] = a; // заменяем в случайно выбранном пикселе чёрной картинки альфу std::cout <<r<<" "<<g<<" "<<b<<" "<<a<< std::endl; // тестируем работоспособность функции просьбой вывести на экран полученный случайный цвет return 0;}Меняем main(void) на RenderSimulator()Теперь нужно отыскать в libfox, которая будет рисовать окно, таймер.
Вот часть кода:
Не торопись. Жду целиком, чтобы собрать и протестировать скорость.
// распространять среди друзей и подруг строго запрещается!// лицензия!!!#include "fox-1.6/fx.h"#include <time.h>#include <iostream>using namespace std;class ImageWindow : public FXMainWindow{ FXDECLARE(ImageWindow)protected: ImageWindow(){}private: FXCanvas *canvas; FXColor bgColor = FXRGB(0, 0, 0);public: enum { ID_CANVAS = FXMainWindow::ID_LAST, }; long onPaint(FXObject *, FXSelector, void *); long onMouseDown(FXObject *, FXSelector, void *);public: ImageWindow(FXApp* a); virtual void create(); virtual ~ImageWindow(); };FXDEFMAP(ImageWindow) ImageWindowMap[] = { FXMAPFUNC(SEL_PAINT, ImageWindow::ID_CANVAS, ImageWindow::onPaint), FXMAPFUNC(SEL_LEFTBUTTONPRESS, ImageWindow::ID_CANVAS, ImageWindow::onMouseDown)};FXIMPLEMENT(ImageWindow, FXMainWindow, ImageWindowMap, ARRAYNUMBER(ImageWindowMap))ImageWindow::ImageWindow(FXApp* a):FXMainWindow(a,"FOX Render",NULL,NULL,DECOR_ALL,0,0,850,600,0,0){ FXHorizontalFrame *container=new FXHorizontalFrame(this,LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED); container->setBackColor(FXRGB(226,223,222)); FXHorizontalFrame *chartwell=new FXHorizontalFrame(container,FRAME_SUNKEN|LAYOUT_FILL_X| LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT, 0,0,0,0,10,10,10,10); canvas = new FXCanvas(chartwell, this, ID_CANVAS, LAYOUT_FILL_X|LAYOUT_FILL_Y);}ImageWindow::~ImageWindow() {}void ImageWindow::create() { FXMainWindow::create(); show(PLACEMENT_SCREEN); }long ImageWindow::onPaint(FXObject *, FXSelector,void *ptr) { FXEvent *ev = (FXEvent *) ptr; FXDCWindow dc(canvas, ev); dc.setForeground(bgColor); dc.fillRectangle(0,0,canvas->getWidth(),canvas->getHeight()); return 1;}timespec diff(timespec start, timespec end);long ImageWindow::onMouseDown(FXObject *, FXSelector, void *ptr){ //timespec time1, time2; //int temp; //clock_gettime(CLOCK_MONOTONIC_RAW , &time1); //for (int i = 0; i< 242000000; i++) //temp+=temp; //clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time2); //std::cout<<diff(time1,time2).tv_sec<<":"<<diff(time1,time2).tv_nsec<<std::endl; long b = 0; double sec = 20.0000567; FXString name; name = FXStringVal(sec); this->setTitle(name); return b;}int main(int argc,char *argv[]){ FXApp application("FoxTest","FoxTest"); application.init(argc,argv); new ImageWindow(&application); application.create(); return application.run(); }
Ну ты и намутил Нафига эта fox-1.6/fx.h А стандартная graphics.h разве не подойдёт?Можешь переписать с комментариями как тут? http://ci-plus-plus-snachala.ru/?p=67...а то тож хочу потихоньку начать врубаться ...
... будет разумным сразу разделить код на ту часть, которая отвечает за интерфейсные вещи и часть, которая обеспечивает формирование массива данных и прописать между ними взаимодействие ...... то есть мешать все в одну кучу и связывать это с какой-то гуишной библиотекой крайне нежелательно ...
Ну ты и намутил Нафига эта fox-1.6/fx.h А стандартная graphics.h разве не подойдёт?
FOX Toolkit — кросс-платформенная библиотека инструментов с открытым исходным кодом (лицензия LGPL) для построения графического интерфейса пользователя.Один из самых быстрых пакетов, содержит большое число элементов GUI и поддержку OpenGL.
Можешь переписать с комментариями как тут?
Человек хочет получить реальные результаты тестов по производительности, но при этом хочет взять что-то неопределённое, двоечником на С++ написанное, сравнить с гамбасом, а потом стучать себя в грудь и говорить, что разницы он не увидел: гамбас крут!
''#Include "fbgfx.bi" '' это пока нафиг не нужноDim As Integer hor=800, vert=600, count '' определение натуральных (целых) переменныхDim As Double start=Timer '' определение вещественных (с плавающей точкой) переменных ScreenRes (hor, vert, 24) '' установка разрешения окна и глубины (число бит) цвета'' функция получения случайного целого числа в диапазоне от 0 до nFunction Poz(n As Integer) As Integer Return Rnd*nEnd Function'' главный цикл Do While inkey = "" '' пока не нажата любая клавиша For count = 1 To 1000000 '' повторяем миллион раз PSet (Poz(hor), Poz(vert)), Rnd*&hFFFFFF '' рисуем точку случайным цветом в случайной позиции Next '' выводим время отрисовки миллиона пикселей в заголовок окна WindowTitle "Draw million pixels time: "+Str(Int((Timer-start)*100)/100)+" sec." start=Timer '' присваиваем значение переменной из системного таймераLoop '' продолжаем главный цикл сначала End '' завершение работы
Если не хочешь или не можешь написать эту простенькую прогу на Си, то так и скажи.
С чего ты взял, что я хочу протестить скорость?чтобы собрать и протестировать скорость.
А мне чё, да ни чё, осталось только материться