脚本: OpenCL 测试 - 页 2 1234 新评论 Mykola Demko 2012.03.06 13:35 #11 Svetosha: 如果这些可能性没有用处,那么它们又有什么用处呢?))))))) 莱特兄弟只飞了 20 米(可以说是示范飞行),他们的发明的用途是洲际飞行(俗话说,感受不同)。 Sceptic Philozoff 2012.03.08 06:45 #12 Zeleniy: 受孕前的卵子。我还是不明白为什么要把它拿出来,还不如做些有用的事情,而不是最后定稿。Svetosha: 而这些机会的使用,如果他们不是有用的))))))。创新常常被这样的 "践行者 "用刺刀刺中,他们从鼻子的角度来判断普遍性的问题,对他们来说,没有什么是有味道的。然后,当大家都能从中获益时,他们就安全地忘记了自己的攻击。 Alexey Volchanskiy 2012.03.18 13:46 #13 Mathemat:这种 "灰色从业者 "常常从反面来看待创新,他们从鼻子的角度来判断普遍性问题,而鼻子是闻不到任何气味的。然后,当所有人都看到好处时,他们就安全地忘记了自己的攻击。 是的,OpenCL 真的很酷。老实说,我已经很久没有跟踪 5 的情况了。相互吸收订单的情况还存在吗? --- 2012.03.18 14:25 #14 VDev: 订单吸收还在吗?不是还在。不可能有其他办法。 Renat Fatkhullin 2012.03.19 16:07 #15 从下一个版本开始,我们将提供新功能,使用 ResourceCreate() 函数即时创建图形资源。下面是一个经过重写和简化的脚本,它无需将图像转储到磁盘,运行速度更快,而且不会与磁盘上的资源访问发生冲突://+------------------------------------------------------------------+ //|OpenCLTest.mq5 //| 2011 年 MetaQuotes 软件公司版权所有。 //|http://www.mql5.com || //+------------------------------------------------------------------+ #property copyright "Copyright 2011, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property version "1.00" //--- #define SIZE_X 512 #define SIZE_Y 512 //+------------------------------------------------------------------+ //| OpenCL 函数代码| //+------------------------------------------------------------------+ const string cl_src= "__kernel void MFractal( \r\n" " float x0, \r\n" " float y0, \r\n" " float x1, \r\n" " float y1, \r\n" " uint max, \r\n" " __global uint *out) \r\n" " { \r\n" " size_t w = get_global_size(0); \r\n" " size_t h = get_global_size(1); \r\n" " size_t gx = get_global_id(0); \r\n" " size_t gy = get_global_id(1); \r\n" " float dx = x0 + gx * (x1-x0) / (float) w; \r\n" " float dy = y0 + gy * (y1-y0) / (float)h; \r\n" " float x = 0; \r\n" " float y = 0; \r\n" " float xx = 0; \r\n" " float yy = 0; \r\n" " float xy = 0; \r\n" " uint i = 0; \r\n" " while ((xx+yy)<4 && i<max) \r\n" " { \r\n" " xx = x*x; \r\n" " yy = y*y; \r\n" " xy = x*y; \r\n" " y = xy+xy+dy; \r\n" " x = xx-yy+dx; \r\n" " i++; \r\n" " } \r\n" " if(i==max) \r\n" " out[w*gy+gx] = 0; \r\n" " else \r\n" " out[w*gy+gx] = (uint)((float)0xFFFFFF/(float)max)*i; \r\n" " } \r\n"; //+------------------------------------------------------------------+ //| 脚本程序启动功能| //+------------------------------------------------------------------+ void OnStart() { int cl_ctx; int cl_prg; int cl_krn; int cl_mem; //--- 初始化 OpenCL 对象 if((cl_ctx=CLContextCreate())==INVALID_HANDLE) { Print("OpenCL not found"); return; } if((cl_prg=CLProgramCreate(cl_ctx,cl_src))==INVALID_HANDLE) { CLContextFree(cl_ctx); Print("OpenCL program create failed"); return; } if((cl_krn=CLKernelCreate(cl_prg,"MFractal"))==INVALID_HANDLE) { CLProgramFree(cl_prg); CLContextFree(cl_ctx); Print("OpenCL kernel create failed"); return; } if((cl_mem=CLBufferCreate(cl_ctx,SIZE_X*SIZE_Y*sizeof(uint),CL_MEM_READ_WRITE))==INVALID_HANDLE) { CLKernelFree(cl_krn); CLProgramFree(cl_prg); CLContextFree(cl_ctx); Print("OpenCL buffer create failed"); return; } //--- 准备执行 float x0 =-2; float y0 =-0.5; float x1 =-1; float y1 = 0.5; uint max = 20000; uint offset[2]={0,0}; uint work [2]={SIZE_X,SIZE_Y}; string objname ="OpenCL_"+IntegerToString(ChartID()); string resname ="Mandelbrot_"+IntegerToString(ChartID()); //--- 设置不可更改的 OpenCL 函数参数 CLSetKernelArg(cl_krn,4,max); CLSetKernelArgMem(cl_krn,5,cl_mem); //--- 创建用于图形显示的对象 ObjectCreate(0,objname,OBJ_BITMAP_LABEL,0,0,0); ObjectSetInteger(0,objname,OBJPROP_XDISTANCE,4); ObjectSetInteger(0,objname,OBJPROP_YDISTANCE,26); //--- 创建初始空图片 uint buf[]; ArrayResize(buf,SIZE_X*SIZE_Y); ResourceCreate(resname,buf,SIZE_X,SIZE_Y,0,0,SIZE_X,COLOR_FORMAT_XRGB_NOALPHA); ObjectSetString(0,objname,OBJPROP_BMPFILE,"::"+resname); //----渲染,直到我们不被外界阻止 while(!IsStopped()) { uint x=GetTickCount(); //--- 设置浮动参数 CLSetKernelArg(cl_krn,0,x0); CLSetKernelArg(cl_krn,1,y0); CLSetKernelArg(cl_krn,2,x1); CLSetKernelArg(cl_krn,3,y1); //--- 渲染框架 CLExecute(cl_krn,2,offset,work); //--- 获取帧数据 CLBufferRead(cl_mem,buf); //--- 输出渲染时间 Comment(IntegerToString(GetTickCount()-x)+" msec per frame"); //--- 将帧保存在内存中并绘制出来 ResourceCreate(resname,buf,SIZE_X,SIZE_Y,0,0,SIZE_X,COLOR_FORMAT_XRGB_NOALPHA); ChartRedraw(); //-- 稍作停顿并更新下一帧的参数 Sleep(10); x0+=0.001 f; x1-=0.001 f; y0+=0.001 f; y1-=0.001 f; } //--- 删除 OpenCL 对象 CLBufferFree(cl_mem); CLKernelFree(cl_krn); CLProgramFree(cl_prg); CLContextFree(cl_ctx); //--- 删除对象 ObjectDelete(0,objname); } //+------------------------------------------------------------------+ 这样,你就可以创建任何带有 alpha 通道的 32 位动态图像,以进行详细渲染。动态创建的资源会进入资源管理器,供终端的 所有MQL5 程序 使用。 Igor Makanu 2012.03.19 17:06 #16 Renat 将提供使用 ResourceCreate() 函数即时创建图形资源的新可能性。 是只公布 ResourceCreate() 函数,还是准备一个用于处理图形对象/原型的类? Renat Fatkhullin 2012.03.19 17:17 #17 IgorM: 是只公布 ResourceCreate() 函数,还是准备一个用于处理图形对象/原型的类?该函数已经可用。在它的帮助下,您可以在自己的缓冲区中创建自己的绘图库,然后将它们绑定到对象上。这样您就可以完全摆脱外部 BMP 文件中的外部绘图库。下面是一个小例子--您可以直接在 buf 缓冲区中绘图,然后在此基础上创建一个资源并将其分配给一个对象。 uint buf[]; ArrayResize(buf,SIZE_X*SIZE_Y); ResourceCreate(resname,buf,SIZE_X,SIZE_Y,0,0,SIZE_X,COLOR_FORMAT_XRGB_NOALPHA); ObjectSetString(0,objname,OBJPROP_BMPFILE,"::"+resname); 稍后,我们将使用本地 2D 加速函数制作一个用于在相同缓冲区中绘图的基元库。这将大大加快绘图速度。 --- 2012.03.19 17:25 #18 Renat:该功能已经可用。在它的帮助下,您已经可以在自己的缓冲区中制作自己的绘图库,然后将它们绑定到对象上。这样,您就可以完全摆脱外部 BMP 文件中的外部绘图库。该功能是否适用于所有 MQL,而不仅仅适用于OpenCL?在创建的 BMP 资源中,alpha 通道的情况如何? Igor Makanu 2012.03.19 17:30 #19 稍后,我们将制作一个基元库,用于使用本地 2D 加速函数在相同的缓冲区中绘图。我明白了,但我认为,开发人员最好同时公布新函数和图形处理基类,否则又要开始 "在大厅里大喊大叫 "了,说在 mql5 上编程很困难。ZY:是不是只有我没有 "回复 "链接? михаил потапыч 2012.03.19 17:33 #20 sergeev 2012.03.19 17:25 # 在创建的 BMP 资源中,alpha 通道的情况如何? 似乎可以 1234 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
如果这些可能性没有用处,那么它们又有什么用处呢?)))))))
创新常常被这样的 "践行者 "用刺刀刺中,他们从鼻子的角度来判断普遍性的问题,对他们来说,没有什么是有味道的。
然后,当大家都能从中获益时,他们就安全地忘记了自己的攻击。
这种 "灰色从业者 "常常从反面来看待创新,他们从鼻子的角度来判断普遍性问题,而鼻子是闻不到任何气味的。
然后,当所有人都看到好处时,他们就安全地忘记了自己的攻击。
订单吸收还在吗?
不是还在。
不可能有其他办法。
从下一个版本开始,我们将提供新功能,使用 ResourceCreate() 函数即时创建图形资源。
下面是一个经过重写和简化的脚本,它无需将图像转储到磁盘,运行速度更快,而且不会与磁盘上的资源访问发生冲突:
这样,你就可以创建任何带有 alpha 通道的 32 位动态图像,以进行详细渲染。
动态创建的资源会进入资源管理器,供终端的 所有MQL5 程序 使用。
是只公布 ResourceCreate() 函数,还是准备一个用于处理图形对象/原型的类?
该函数已经可用。
在它的帮助下,您可以在自己的缓冲区中创建自己的绘图库,然后将它们绑定到对象上。这样您就可以完全摆脱外部 BMP 文件中的外部绘图库。
下面是一个小例子--您可以直接在 buf 缓冲区中绘图,然后在此基础上创建一个资源并将其分配给一个对象。
稍后,我们将使用本地 2D 加速函数制作一个用于在相同缓冲区中绘图的基元库。这将大大加快绘图速度。
该功能已经可用。
在它的帮助下,您已经可以在自己的缓冲区中制作自己的绘图库,然后将它们绑定到对象上。这样,您就可以完全摆脱外部 BMP 文件中的外部绘图库。
该功能是否适用于所有 MQL,而不仅仅适用于OpenCL?
在创建的 BMP 资源中,alpha 通道的情况如何?
我明白了,但我认为,开发人员最好同时公布新函数和图形处理基类,否则又要开始 "在大厅里大喊大叫 "了,说在 mql5 上编程很困难。
ZY:是不是只有我没有 "回复 "链接?
sergeev 2012.03.19 17:25 #
在创建的 BMP 资源中,alpha 通道的情况如何?