1. 程式人生 > >SDL系列講解(十二)建立視窗流程

SDL系列講解(十二)建立視窗流程

專案合作

建立視窗時序圖

時序圖細節

看下建立視窗的流程圖,我們簡單說下過程。視窗建立,會先判斷是否進行了SDL_VideoInit,如果沒有,需要初始化。

完成了VideoInit的初始化後,我們使用LoadLibrary將android平臺的opengl es動態庫進行載入,同時將動態庫裡面的一些方法進行儲存,作為我們適配android的實質方法,完成對接任務。SDL平臺呼叫繪製,用的是SDL的一套標準,但是具體真正具體到每個平臺是需要具體平臺的實現,這裡就是完成這個對接,使得SDL的方法,最終能操作到android平臺上。

完成了opengl es的方法賦值之後,我們需要完成真正的視窗建立。在講解這個之前,我們講下android的繪製流程。我們知道,android使用activity進行承載介面,我們普通的View,比如button ,Textview這些,都是在ondraw進行繪製,使用傳遞的一個引數canvas,這個叫畫布。是作用在一個繪製表面上的一套封裝,使用canvas的一些api,可以簡化我們直接繪製的難度,直接使用寫好的畫線,畫圓,畫一個弧度等等。當我們在canvas畫好之後,系統會根據當前視窗耳朵層疊關係,透明度,縮放等等,進行將多個視窗排序,混合之後,使用驅動操作,將最終的一屏資料,刷入顯示卡,然後我們便看到了效果。

使用canvas,有個瓶頸便是,效能問題。ondraw屬於主執行緒,於是乎就不能長時間頻繁繪製,這樣子會導致手機卡頓,出現anr,為了規避這種情況(特別是遊戲,用canvas繪製,只能做比如五子棋,簡單的連連看遊戲,因為不會大量更新介面),大型的遊戲開發,都是使用opengl es,android為了配合opengl es的硬體加速渲染,在上層配置了一個SurfaceView,這個是直接申請了一塊繪製表面,獨立於activity的其他View,自己獨佔一份,因此我們不需要使用ondraw繪製,這樣子我們就可以單獨開啟一個繪製執行緒,單獨作用在這個繪製表面,而直接操作繪製表面,會讓我們開發效率大大降低。於是,我們將這個繪製表面進行封裝,提供一套介面,而這套介面是配合硬體加速開發出來,於是我們的繪製速度會大幅度提升。而我們此處的封裝,就是使用eglCreateWindowSurface,如此之後
我們就可以使用gl的一系列方法進行繪製,最後使用gl的swap-buffer將資料刷入繪製表面,然後進行和其他視窗混合,最終顯示到螢幕。

相關推薦

SDL系列講解建立視窗流程

專案合作 建立視窗時序圖 時序圖細節 看下建立視窗的流程圖,我們簡單說下過程。視窗建立,會先判斷是否進行了SDL_VideoInit,如果沒有,需要初始化。 完成了VideoInit的初始化後,我們使用LoadLibrary將andr

Java NIO系列教程 Java NIO 與 IO

Java NIO系列教程(十二) Java NIO 與 IO 當學習了 Java NIO 和 IO 的 API 後,一個問題馬上湧入腦海: 我應該何時使用 IO,何時使用 NIO 呢?在本文中,我會盡量清晰地解析 Java NIO 和 IO 的差異、它們的使用場景,以及它們如何影響您的程式碼設計。 下表

Java NIO系列教程 Java NIO與IO

作者:Jakob Jenkov   譯者:郭蕾    校對:方騰飛 當學習了Java NIO和IO的API後,一個問題馬上湧入腦海: 我應該何時使用IO,何時使用NIO呢?在本文中,我會盡量清晰地解析Java NIO和IO的差異、它們的使用場景,以及它們如何影響您的程式碼設計。 Java

Eclipse使用—— 建立Maven多模組父子專案演示Maven的聚合和繼承以及模組之間的依賴關係

在子模組中宣告該模組所屬的父專案,如下: <packaging>jar</packaging><!-- 打包方式jar包或者war包,如果不宣告預設為jar包,當然也可以為pom,這意味著此模組下面還有子模組 --> <parent> <grou

SDL入門教程:音樂和音效

作者:龍飛 1:擴充套件庫SDL_mixer         根據網上資料的說法,SDL本身的聲音體系做得不是很完善,好在還有一個比較完善的擴充套件庫SDL_mixer,這個庫支援包括wav, mp3, ogg和midi的聲音和音樂,也算是相當完善了。下載地址在:http://www.libsdl.org/

MYSQL學習筆記建立高階聯結

使用表別名 SELECT ——,—— FROM —— AS c,—— AS o,—— AS oi WHERE c.——=o.—— AND oi.——=o.—— AND ——=——;

資料預處理系列用截斷奇異值分解降維

博主簡介:風雪夜歸子(英文名: Allen),機器學習演算法攻城獅,喜愛鑽研Machine Learning的黑科技,對Deep Learning和Artificial Intellige

ZooKeeper系列:服務端實現機制

服務端有3種執行方式:leader,follower,observer。leader是領導者,一個ZooKeeper叢集同一時刻最

Java--建立視窗,新增按鈕,接受事件

建立視窗的話需要引入javax.swing.*,使用了裡面的JFrame,如下 public static void main(String[] args){ JFrame frame=new JFrame("Hello World");//括號中為視

PHP系列數據庫抽象層pdo

pdo1、數據庫抽象層pdo(1)、PDO(php data object)擴展類庫為php訪問數據庫定義了輕量級的、一致性的接口它可以支持mysql,postgresql,oracle,mssql等多種數據庫(2). PDO的安裝編輯php.ini文件:– extension=php_pdo.dll– ex

SQL系列—— insert update delete

否則 dcl delete com condition 維護 head control update 前言 這個系列的前面都一直在介紹查詢select。但是SQL中十分廣泛,按對數據的不同處理可以分為: DML:全稱Data Manipulation Language,從

劍指offer系列最小的k個數, 連續子陣列的最大和,整數中1出現的個數

最小的k個數 題目描述 輸入n個整數,找出其中最小的K個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,。 解題思路: 思路1,這一題應用堆排序演算法複雜度只有O(nlog k),堆是完全二叉樹的一種,最大堆就是最上面的數是最大的,該方法基於二

機器學習與深度學習系列連載: 第二部分 深度學習卷積神經網路 3 經典的模型LeNet-5,AlexNet ,VGGNet,GoogLeNet,ResNet

卷積神經網路 3 經典的模型 經典的卷積神經網路模型是我們學習CNN的利器,不光是學習原理、架構、而且經典模型的超引數、引數,都是我們做遷移學習最好的源材料之一。 1. LeNet-5 [LeCun et al., 1998] 我們還是從CNN之父,LeCun大神在98年提出的模

linux系列:more命令

1、命令格式:     more [-dlfpcsu ] [-num ] [+/ pattern] [+ linenum] [file] 2、命令功能:   &nb

使用O2OA次開發搭建企業辦公平臺流程開發篇:報銷審批流程需求和應用建立

本部落格為O2OA系列教程、O2OA使用手冊,教程目錄和各章節天梯將在連載完後更新。 使用O2OA二次開發搭建企業辦公平臺(一)平臺部署篇:平臺下載和部署 使用O2OA二次開發搭建企業辦公平臺(二)平臺部署篇:埠衝突和伺服器埠配置 使用O2OA二次開發搭建企業辦公平臺(三)平臺部署篇:使用外部資料庫

[搬運工系列]-JMeterJmeter之Bean shell使用() Jmeter之Bean shell使用(一) Jmeter之Bean shell使用(一)

 上一篇Jmeter之Bean shell使用(一)簡單介紹了下Jmeter中的Bean shell,本文是對上文的一個補充,主要總結下常用的幾種場景和方法,相信這些基本可以涵蓋大部分的需求。本節內容如下: 一、操作變數 二、操作屬性  三、自定義函式 四、引用外部java檔案 五、引用外

Django框架—— 補充:inclusion_tag、defer、only、choice、事務、建立多對多的第三張表

補充:inclusion_tag、defer、only、choice、事務、建立多對多的第三張表 一、inclusion_tag 1、作用 用於生成HTML片段,是資料由引數傳入而變成動態 2、使用 # 1.app下新建一個模組,templatetags # 2.建立一個py檔案(mytag.py)

執行緒管理用執行緒工廠建立執行緒

宣告:本文是《 Java 7 Concurrency Cookbook 》的第一章, 作者: Javier Fernández González 譯者:鄭玉婷 用執行緒工廠建立執行緒 在面向物件程式設計的世界中,工廠模式是最有用的設計模式。它是一個創造模式,還有它的目的是建立一個或幾個類的物件

SpringBoot學習-SpringBoot中建立WebSocket連線

WebSocket握手圖解: 建立連線的步驟: pom檔案中新增依賴 建立握手攔截器 建立WebSocket處理類 配置WebSocket 前端頁面訪問 專案目錄結構: 1.pom檔案中新增依賴 <!-- springboot

利用WPF建立自己的3d gis軟體非axhost方式SDK中的導航系統

先下載SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bPew 密碼:1te1 地圖資料包(sqlserver2008R2版本,也可以不下載):  https://pan.baidu.com/s/1PjcNamad7OVpCrsV