
3DFX是以前著名的一家显卡厂。早被nVIDIA收购了。
而CS里面出现这驱动是给3DFX出的显卡用的(因为3DFX出过几款太经典的显卡,早期基本统一显卡市场了。那时候用这个卡的很多)。以前nVIDIA也有部分老显卡可以支持3DFX驱动(刚收购3DFX那段时间)。而现在是全面转到OPENGL和D3D了。所以根本就不支持。
你所说选择这驱动时候速度快,那是根本没用到这驱动。而去CPU在软计算数据。显卡等于就显示而已。而这时候是很多游戏特效没有的情况下。
而CS这游戏比较老了。那时候特效并不多。所以很难分辨出CPU在软解而已。看起来差不多。所以开特效和不开区别不大。但特效还是很占资源的。
还有你这显卡直接用D3D就行了。无需OPNEGL。D3D兼容好。
1SurfaceFlinger是一个服务,主要是负责合成各窗口的Surface,然后通过OpenGLES显示到FrameBuffer上。2DisplayHardware是对显示设备的抽象,包括FrameBuffer和Overlay。加载FrameBuffer和Overlay插件,并初始化OpenGLES:view plainmNativeWindow = new FramebufferNativeWindow(); framebuffer_device_t const fbDev = mNativeWindow->getDevice(); if (hw_get_module(OVERLAY_HARDWARE_MODULE_ID, &module) == 0) { overlay_control_open(module, &mOverlayEngine); } surface = eglCreateWindowSurface(display, config, mNativeWindowget(), NULL); eglMakeCurrent(display, surface, surface, context); 3FramebufferNativeWindow 是framebuffer 的抽象,它负责加载libgralloc,并打开framebuffer设备。FramebufferNativeWindow并不直接使用 framebuffer,而是自己创建了两个Buffer:queueBuffer负责显示一个Buffer到屏幕上,它调用fb->post去显示。dequeueBuffer获取一个空闲的Buffer,用来在后台绘制。这两个函数由eglSwapBuffers调过来,调到view plainegl_window_surface_v2_t::swapBuffers: nativeWindow->queueBuffer(nativeWindow, buffer); nativeWindow->dequeueBuffer(nativeWindow, &buffer); 4msm7k/liboverlay是Overlay的实现,与其它平台不同的是,高通平台上的Overlay并不是提供一个framebuffer设备,而通过fb0的ioctl来实现的,ioctl分为两类 *** 作:OverlayControlChannel用于设置参数,比如设置Overlay的位置,宽度和高度:view plainbool OverlayControlChannel::setPosition(int x, int y, uint32_t w, uint32_t h) { ovdst_rectx = x; ovdst_recty = y; ovdst_rectw = w; ovdst_recth = h; ioctl(mFD, MSMFB_OVERLAY_SET, &ov); } OverlayDataChannel用于显示Overlay,其中最重要的函数就是queueBuffer:view plainbool OverlayDataChannel::queueBuffer(uint32_t offset) { mOvDatadataoffset = offset; ioctl(mFD, MSMFB_OVERLAY_PLAY, odPtr)) } 5msm7k/libgralloc 是显示缓存的抽象,包括framebuffer和普通Surface的Buffer。framebuffer只是/dev/graphic/fb0的包 装,Surface的Buffer则是对/dev/pmem、ashmem和GPU内存(msm_hw3dm)的包装,它的目标主要是方便硬件加速,因为 DMA传输使用物理地址,要求内存在物理地址上连续。6msm7k/libcopybit这是2D加速库,主要负责Surface的拉伸、旋转和合成等 *** 作。它有两种实现方式:copybitcpp: 基于fb0的ioctl(MSMFB_BLIT)的实现。copybit_c2dcpp: 基于kgsl的实现,只是对libC2D2so的包装,libC2D2so应该是不开源的。7pmemmisc/pmemc: 对物理内存的管理,算法和用户空间的接口。board-msm7x27c定义了物理内存的缺省大小:view plain#define MSM_PMEM_MDP_SIZE 0x1B76000 #define MSM_PMEM_ADSP_SIZE 0xB71000 #define MSM_PMEM_AUDIO_SIZE 0x5B000 #define MSM_FB_SIZE 0x177000 #define MSM_GPU_PHYS_SIZE SZ_2M #define PMEM_KERNEL_EBI1_SIZE 0x1C00 msm_msm7x2x_allocate_memory_regions分配几大块内存用于给pmem做二次分配。8KGSLKernel Graphics System Layer (KGSL),3D图形加速驱动程序,源代码drivers/gpu/msm目录下,它是对GPU的包装,给OpenGLES 20提供抽象的接口。9msm_hw3dm这个我在内核中没有找到相关代码。10msm_fbmsm_fbc: framebuffer, overlay和blit的用户接口。mdp_dmac: 对具体显示设备的包装,提供两种framebuffer更新的方式:mdp_refresh_screen: 定时更新。mdp_dma_pan_update: 通过pan display主动更新。mdp_dma_lcdcc:针对LCD实现的显示设备,mdp_lcdc_update用更新framebuffer。
准备为了开始本次的教程,你必须具备:1一款支持Android开发的IDE,如果你没有的话,可以在AndroidDeveloperwebsite下载最新版本的Androidstudio。2一款运行Android40之上Android手机,并且GPU支持OpenGLES203对OpenGL的基本知识了解设置OpenGLES环境创建GLSurfaceView为了显示OpenGL的图形,你需要使用GLSurfaceView类,就像其他任何的View子类意义,你可以将它添加到你的Activity或Fragment之上,通过在布局xml文件中定义或者在代码中创建实例。在本次的教程中,我们使用GLSurfaceView作为唯一的View在我们的Activity中,因此,为了简便,我们在代码中创建GLSurfaceView的实例并将其传入setContentView中,这样它将会填充你的整个手机屏幕。Activity中的onCreate方法如下:protectedvoidonCreate(BundlesavedInstanceState){superonCreate(savedInstanceState);GLSurfaceViewview=newGLSurfaceView(this);setContentView(view);}123456123456因为媒体效果的框架仅仅支持OpenGLES20及以上的版本,所以在setEGLContextClientVersion方法中传入2;viewsetEGLContextClientVersion(2);11为了确保GLSurfaceView仅仅在必要的时候进行渲染,我们在setRenderMode方法中进行设置:viewsetRenderMode(GLSurfaceViewRENDERMODE_WHEN_DIRTY);11创建RendererRenderer负责渲染GLSurfaceView中的内容。创建类实现接口GLSurfaceViewRenderer,在这里我们打算将这个类命名为EffectsRenderer,添加构造函数并覆写接口中的抽象方法,如下:publicclassEffectsRendererimplementsGLSurfaceViewRenderer{publicEffectsRenderer(Contextcontext){super();}@OverridepublicvoidonSurfaceCreated(GL10gl,EGLConfigconfig){}@OverridepublicvoidonSurfaceChanged(GL10gl,intwidth,intheight){}@OverridepublicvoidonDrawFrame(GL10gl){}}123456789101112131415161718123456789101112131415161718回到Activity中调用setRenderer方法,让GLSurfaceView使用我们创建的Renderer:viewsetRenderer(newEffectsRenderer(this));11编写Manifest文件如果你想要发布你的App到谷歌商店,在AndroidManifestxml文件中添加如下语句:11这会确保你的app只能被安装在支持OpenGLES20的设备之上。现在OpenGL环境准备完毕。创建一个OpenGL平面定义顶点GLSurfaceView是不能直接显示一张照片的,照片首先应该被转化为纹理,应用在OpenGLsquare之上。在本次教程中,我将创建一个2D平面,并且具有4个顶点。为了简单,我将使用一个长方形,现在,创建一个新的类Square,用它来代表形状。publicclassSquare{}123123默认的OpenGL系统的坐标系中的原点是在中心,因此4个角的坐标可以表示为:左下角:(-1,-1)右下角:(1,-1)右上角:(1,1)左上角:(-1,1)我们使用OpenGL绘制的所有的物体都应该是由三角形决定的,为了画一个方形,我们需要两个具有一条公共边的三角形,那意味着这些三角形的坐标应该是:triangle1:(-1,-1),(1,-1),和(-1,1)triangle2:(1,-1),(-1,1),和(1,1)创建一个float数组来代表这些顶点:privatefloatvertices[]={-1f,-1f,1f,-1f,-1f,1f,1f,1f,};123456123456为了在square上定位纹理,需要确定纹理的顶点坐标,创建另一个数组来表示纹理顶点的坐标:privatefloattextureVertices[]={0f,1f,1f,1f,0f,0f,1f,0f};123456123456创建缓冲区这些坐标数组应该被转变为缓冲字符(bytebuffer)在OpenGL可以使用之前,接下来进行定义:privateFloatBufferverticesBuffer;privateFloatBuffertextureBuffer;1212在initializeBuffers方法中去初始化这些缓冲区:使用ByteBufferallocateDirect来创建缓冲区,因为float是4个字节,那么我们需要的byte数组的长度应该为float的4倍。下面使用ByteBuffernativeOrder方法来定义在底层的本地平台上的byte的顺序。使用asFloatBuffer方法将ByteBuffer转化为FloatBuffer,在FloatBuffer被创建后,我们调用put方法来将float数组放入缓冲区,最后,调用position方法来保证我们是由缓冲区的开头进行读取。privatevoidinitializeBuffers(){ByteBufferbuff=ByteBufferallocateDirect(verticeslength4);bufforder(ByteOrdernativeOrder());verticesBuffer=buffasFloatBuffer();verticesBufferput(vertices);verticesBufferposition(0);buff=ByteBufferallocateDirect(textureVerticeslength4);bufforder(ByteOrdernativeOrder());textureBuffer=buffasFloatBuffer();textureBufferput(textureVertices);textureBufferposition(0);}1234567891011121312345678910111213创建着色器着色器只不过是简单的运行在GPU中的每个单独的顶点的C程序,在本次教程中,我们使用两种着色器:顶点着色器和片段着色器。顶点着色器的代码:attributevec4aPosition;attributevec2aTexPosition;varyingvec2vTexPosition;voidmain(){gl_Position=aPosition;vTexPosition=aTexPosition;};12345671234567片段着色器的代码precisionmediumpfloat;uniformsampler2DuTexture;varyingvec2vTexPosition;voidmain(){gl_FragColor=texture2D(uTexture,vTexPosition);};123456123456如果你了解OpenGL,那么这段代码对你来说是熟悉的,如果你不能理解这段代码,你可以参考OpenGLdocumentation。这里有一个简明扼要的解释:顶点着色器负责绘制单个顶点。aPosition是一个变量被绑定到FloatBuffer上,包含着这些顶点的坐标。相似的,aTexPosition是一个变量被绑定到FloatBuffer上,包含着纹理的坐标。gl_Position是一个在OpenGL中创建的变量,代表每一个顶点的位置,vTexPosition是一个数组变量,它的值被传递到片段着色器中。在本教程中,片段着色器负责square的着色。它使用texture2D方法从纹理中拾取颜色,并且使用一个在OpenGL中被创建的变量gl_FragColor将颜色分配到片段。在该类中,着色器的代码应该被转化为String。privatefinalStringvertexShaderCode="attributevec4aPosition;"+"attributevec2aTexPosition;"+"varyingvec2vTexPosition;"+"voidmain(){"+"gl_Position=aPosition;"+"vTexPosition=aTexPosition;"+"}";privatefinalStringfragmentShaderCode="precisionmediumpfloat;"+"uniformsampler2DuTexture;"+"varyingvec2vTexPosition;"+"voidmain(){"+"gl_FragColor=texture2D(uTexture,vTexPosition);"+"}";1234567891011121314151612345678910111213141516创建程序创建新的方法initializeProgram来创建一个编译和链接着色器的OpenGL程序。使用glCreateShader创建一个着色器对象,并且返回以int为表示形式的指针。为了创建顶点着色器,传递GL_VERTEX_SHADER给它。相似的,为了创建一个片段着色器,传递GL_FRAGMENT_SHADER给它。下面使用glShaderSource方法关联相对应的着色器代码到着色器上。使用glCompileShader编译着色器代码。在编译了着色器的代码后,创建一段新的的程序glCreateProgram,与glCreateShader相似,它也返回一个以int为表示形式的指针。调用glAttachShader方法附着着色器到程序中,最后,调用glLinkProgram进行链接。代码:privateintvertexShader;privateintfragmentShader;privateintprogram;privatevoidinitializeProgram(){vertexShader=GLES20glCreateShader(GLES20GL_VERTEX_SHADER);GLES20glShaderSource(vertexShader,vertexShaderCode);GLES20glCompileShader(vertexShader);fragmentShader=GLES20glCreateShader(GLES20GL_FRAGMENT_SHADER);GLES20glShaderSource(fragmentShader,fragmentShaderCode);GLES20glCompileShader(fragmentShader);program=GLES20glCreateProgram();GLES20glAttachShader(program,vertexShader);GLES20glAttachShader(program,fragmentShader);GLES20glLinkProgram(program);}1234567891011121314151617181912345678910111213141516171819你可能会发现,OpenGL的方法(以gl开头的)都是在GLES20类中,这是因为我们使用的是OpenGLES20,如果我们使用更高的版本,就会用到这些类:GLES30,GLES31。画出形状现在定义draw方法来利用我们之前定义的点和着色器进行绘制。下面是你需要做的:1使用glBindFramebuffer方法创建一个帧缓冲对象(FBO)2调用glUseProgram创建程序,就像之前所提3传递GL_BLEND给glDisable方法,在渲染过程中禁用颜色的混合。4调用glGetAttribLocation得到变量aPosition和aTexPosition的句柄5使用glVertexAttribPointer连接aPosition和aTexPosition的句柄到各自的verticesBuffer和textureBuffer6使用glBindTexture方法绑定纹理(作为draw方法的参数传入)到片段着色器上7调用glClear方法清空GLSurfaceView的内容8最后,使用glDrawArrays方法画出两个三角形(也就是方形)代码:publicvoiddraw(inttexture){GLES20glBindFramebuffer(GLES20GL_FRAMEBUFFER,0);GLES20glUseProgram(program);GLES20glDisable(GLES20GL_BLEND);intpositionHandle=GLES20glGetAttribLocation(program,"aPosition");inttextureHandle=GLES20glGetUniformLocation(program,"uTexture");inttexturePositionHandle=GLES20glGetAttribLocation(program,"aTexPosition");GLES20glVertexAttribPointer(texturePositionHandle,2,GLES20GL_FLOAT,false,0,textureBuffer);GLES20glEnableVertexAttribArray(texturePositionHandle);GLES20glActiveTexture(GLES20GL_TEXTURE0);GLES20glBindTexture(GLES20GL_TEXTURE_2D,texture);GLES20glUniform1i(textureHandle,0);GLES20glVertexAttribPointer(positionHandle,2,GLES20GL_FLOAT,false,0,verticesBuffer);GLES20glEnableVertexAttribArray(positionHandle);GLES20glClear(GLES20GL_COLOR_BUFFER_BIT);GLES20glDrawArrays(GLES20GL_TRIANGLE_STRIP,0,4);}1234567891011121314151617181920212212345678910111213141516171819202122在构造函数中添加初始化方法:publicSquare(){initializeBuffers();initializeProgram();}12341234渲染OpenGL平面和纹理现在我们的渲染器什么也没做,我们需要改变它来渲染我们在前面创造的平面。首先,让我们创建一个Bitmap,添加一张照片到res/drawable文件夹之下,我把它命名为forestjpg,使用BitmapFactory将照片转化为Bitmap。另外将照片的尺寸存储下来。改变EffectsRenderer的构造函数如下,privateBitmapphoto;privateintphotoWidth,photoHeight;publicEffectsRenderer(Contextcontext){super();photo=BitmapFactorydecodeResource(contextgetResources(),Rdrawableforest);photoWidth=photogetWidth();photoHeight=photogetHeight();}1234567812345678
是木马,建议你最好在安全模式下查杀,这样可以更彻底一点,重启电脑时,按住F8就进入电脑的安全模式了,下面的是免费版的,注意及时升级杀毒软件的病毒库。
杀马(Defendio)
V4220900
添加了对大量新威胁的查杀,可快速杀除木马软件,简体中文绿色免费版。
木马克星2009
build
木马克星乃反黑客-杀木马工具,可以查杀8122种国际木马,1053种密码偷窃木马,保证查杀传奇密码偷窃木马,oicq类寄生木马,冰河类文件关联木马,密码解霸,奇迹射手等游戏密码邮寄木马,内置木马防火墙,任何黑客程序试图发送密码邮件,都需要Iparmor
确认,不仅可以查杀木马,更可以反查黑客密码。
下载地址:
>
一、Qt GUI方面:
1、QOpenGLContext已能够适配现有的native context(如EGL,GLX等)。这使得Qt可以跟其他框架交互,例如游戏引擎。
2、提高对OpenGL ES 30/31的支持。如果编译Qt库时打开“-opengl es2”选项,高版本的ES头文件会自动包含在Qt的头文件中。已经通过GLES3的接口支持Vertex array objects、 framebuffer blits 、 multisampling。
3、在Windows平台只要编译Qt库时打开 -opengl dynamic选项,那么基于该Qt库的应用程序在运行时可以动态地决定选用哪个OpenGL实现版(opengl32dll 或者 ANFLE‘s OpenGL ES20)。不必为了使用不同的OpenGL而分别编译程序。
4、QOpenGLWidget:替代了原来的QGLWidget以及QQuickWidget中相应部分。
5、QOpenGLWindow:由于该类的存在,很方便的通过OpenGL将内容绘制到QWindow。
6、QRasterWindow:由于该类的存在,很方便的通过基于软件实现的QPainter将内容绘制到QWindow。
·「译注:不支持硬件加速的情况下,QPainter使用Raster纯软件的方式绘制图形」
7、支持“10位颜色通道”的图像(10-bit per color channels)。尽管Raster引擎内部只使用8位颜色通道,这些图像仍可以被渲染。如果被用作QOpenGLFramebufferObject的内部格式,在OpenGL驱动支持的情况下,OpenGL引擎可以全精度渲染。
8、WinRT:加入了对“原生文件对话框”的支持。
朋友,这是你的电脑“丢失”或“误删”了“系统文件”,或“系统文件”被病
毒和“顽固”木马“破坏”,我给你8种方法:(答案原创,严禁盗用)
1下载个:“360系统急救箱”!(安全模式下,联网使用,效果更好!)
(1)先“查杀”病毒,再删除后,“立即重启”!
(2)重启开机后,再点开“隔离|恢复”,点:“彻底删除”,病毒文件和“可
疑自启动项”!
(3)再点开“修复”,“全选”,再“立即修复”文件!
(4)再点开:“恢复丢失的dll文件”,扫描一下,如果没有就行了!
2。用“360安全卫士”里“系统修复”,点击“使用360安全网址导航”,再
“全选”,“一键修复”,“返回”!
3。用“360安全卫士”的“扫描插件”,然后再“清理插件”,把它删除!
4。再用“360杀毒双引擎版”,勾选“自动处理扫描出的病毒威胁”,用“全盘
扫描”和“自定义扫描”,扫出病毒木马,再点删除!
重启电脑后,来到“隔离区”,点“彻底删除”!
5。使用360安全卫士的“木马云查杀”,全盘扫描,完毕再“自定义扫描”!
扫出木马或恶意病毒程序,就点删除!
重启电脑后,来到“隔离区”,点“彻底删除”!
6。如果还是不行,试试:“金山急救箱”的扩展扫描和“金山网盾”,一键修
复!
7。再不行,重启电脑,开机后,按F8,回车,回车,进到“安全模式”里,
“高级启动选项”里,“最后一次正确配置”,按下去试试,看看效果!
8。实在不行,做“一键还原”系统!(方法:我的百度空间的博客里有)
以上就是关于9800GT玩CS不能用OPENGL里的3Dfx Mini Driver驱动程序全部的内容,包括:9800GT玩CS不能用OPENGL里的3Dfx Mini Driver驱动程序、为什么android4.2.2没有framebuffer、Android OpenGL表面崩溃在设备方向改变问题,怎么解决等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)