- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试使用 OpenGL 渲染 3 个四边形(1 个背景图,2 个 Sprite )。我有以下代码:
void GLRenderer::onDrawObjects(long p_dt)
{
float _log_last_time = ELAPSED_MS;
fprintf(stdout, "-- starting draw: %.4f, dTime: %.4f\n", ELAPSED_MS, ELAPSED_MS - _log_last_time);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
for(std::vector::iterator itr = m_displayList.begin();
itr != m_displayList.end();
itr++)
{
Sprite* spriteToRender = (*itr)->m_sprite;
float _log_last_time1 = ELAPSED_MS;
fprintf(stdout, "---- profiling object: %.4f, dTime: %.4f\n", ELAPSED_MS, ELAPSED_MS - _log_last_time1);
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
// glTranslate, glRotate, glScale goes here
fprintf(stdout, "---- transform done: %.4f, dTime: %.4f\n", ELAPSED_MS, ELAPSED_MS - _log_last_time1);
_log_last_time1 = ELAPSED_MS;
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, (*itr)->m_material->m_glId);
fprintf(stdout, "---- set material done: %.4f, dTime: %.4f\n", ELAPSED_MS, ELAPSED_MS - _log_last_time1);
_log_last_time1 = ELAPSED_MS;
unsigned listIds[] = {
(*itr)->m_mesh->m_glId
};
glCallLists(1, GL_UNSIGNED_INT, listIds);
fprintf(stdout, "---- draw mesh done: %.4f, dTime: %.4f\n", ELAPSED_MS, ELAPSED_MS - _log_last_time1);
_log_last_time1 = ELAPSED_MS;
}
fprintf(stdout, "-- flushing to card: %.4f, dTime: %.4f\n", ELAPSED_MS, ELAPSED_MS - _log_last_time);
_log_last_time = ELAPSED_MS;
glFlush();
glFinish();
fprintf(stdout, "-- flush done: %.4f, dTime: %.4f\n", ELAPSED_MS, ELAPSED_MS - _log_last_time);
_log_last_time = ELAPSED_MS;
}
我在控制台中得到以下结果:
-- starting draw: 24000.0000, dTime: 0.0000
---- profiling object: 24014.0000, dTime: 0.0000
---- transform done: 24033.0000, dTime: 19.0000
---- set material done: 24046.0000, dTime: 0.0000
---- draw mesh done: 24066.0000, dTime: 1.0000
---- profiling object: 24084.0000, dTime: 0.0000
---- transform done: 24102.0000, dTime: 18.0000
---- set material done: 24120.0000, dTime: 0.0000
---- draw mesh done: 24305.0000, dTime: 164.0000
---- profiling object: 24319.0000, dTime: 0.0000
---- transform done: 24338.0000, dTime: 19.0000
---- set material done: 24356.0000, dTime: 0.0000
---- draw mesh done: 24375.0000, dTime: 2.0000
-- flushing to card: 24389.0000, dTime: 389.0000
-- flush done: 24424.0000, dTime: 18.0000
如您所见,第二个四边形的绘制花费了很长时间(164 毫秒)。我不知道为什么会这样,因为它们都是四边形的。我还检查了纹理(如果相关),但它比 bg(第一个四边形)小很多。如果它有任何相关性,我认为第一个四边形应该画得更长,而不是第二个。
我是 OpenGL 的新手(我过去做过很多 opengl,但只是初学者)所以我对自己在做什么有一些想法。我只是不确定如何进一步优化它以删除 164 毫秒的进程。
我怎样才能删除或最小化这个 164 毫秒的过程?
我必须注意,我使用的是带有英特尔 GMA 450 机器的英特尔凌动。
1 Câu trả lời
让我们假设这个神秘的 ELAPSED_MS
宏是一个周期精确的 CPU 计数器。我很怀疑这是真的,因为它似乎以很大的毫秒增量跳跃,但让我们假装是这种情况。
您分析 OpenGL 的方法完全错误。您没有测量渲染四边形所需的时间。您正在测量完成 glFinish
所需的时间。无法保证 glFinish
会在四边形完成渲染时返回。事实上,它可能会等待很长时间,可能是为了线程任务切换或其他什么。谁知道。
重点是您的分析方法不可靠。请停止使用它们。为 OpenGL 中的实际渲染操作获取分析数据的唯一准确方法是使用 timer queries (专门设计用于测试在 GPU 上完成操作需要多长时间)或使用 proprietary extensions .
微观分析(如分析绘制四边形所需的时间)很难正确执行。尤其是四边形绘图通常不值得费心分析。
ELAPSED_MS is ((((float)clock()) / CLOCKS_PER_SEC) * 1000.0f)
这没什么用。因为即使您的方法很好,clock
也不是进行任何形式计时的可靠方法。您必须使用 platform-specific calls ,或像 C++11's chrono 这样的平台中立库(或等效的 Boost)。
关于c++ - 优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13080431/
So sánh mã: const char x = 'a'; std::cout > (0C310B0h) 00C3100B add esp,4 và const i
Xin chào, tôi đang sử dụng Matlab Optimization Solver nhưng tôi gặp vấn đề với chương trình này. Tôi nhận được thông báo fmincon đã dừng vì giá trị hàm mục tiêu nhỏ hơn giá trị mặc định cho giới hạn hàm mục tiêu và mức độ thỏa mãn ràng buộc nằm trong giá trị mặc định cho dung sai ràng buộc. Tôi cũng nhận được tin nhắn sau. Cảnh báo: Khoảnh khắc
Việc tối ưu hóa Visual Studio giúp tôi tiết kiệm rất nhiều thời gian để thiết lập và chạy nó, và tôi thấy khó có thể quay lại Eclipse khi phải phát triển J2EE. Vì vậy, tôi cũng muốn biết liệu mọi người có mẹo hay thủ thuật nào để
Tình huống như sau: Trong bảng tính Excel của tôi, có một cột chứa các mục có dạng 1-tên. Vì số đó cũng có thể có hai chữ số nên tôi muốn loại bỏ những chữ số đó. Đây không phải là vấn đề thực sự, tôi đã làm cho nó hoạt động, chỉ là hiệu suất thì tệ quá. Bây giờ chương trình của tôi nhập vào khoảng
Điều này có tạo ra sự khác biệt nào không: $(".topHorzNavLink").click(function() { var theHoverContainer = $("#hoverContainer");
Câu hỏi này đã có câu trả lời: Đã đóng cách đây 11 năm. Có thể trùng lặp: Chi phí của '$(this)' là bao nhiêu? Tôi thường thấy $(this) tham chiếu đến cùng một
Tôi vừa hoàn thành một dự án phát triển lớn. Chúng tôi có thời gian eo hẹp nên rất nhiều hoạt động tối ưu hóa đã bị "hoãn lại". Bây giờ đã đến thời hạn, chúng ta sẽ quay lại và cố gắng tối ưu hóa mọi thứ. Câu hỏi của tôi là: những điều quan trọng nhất bạn cần lưu ý khi tối ưu hóa một trang web jQuery là gì? Hoặc, tôi
Vì vậy, tôi đã viết trò chơi bằng JavaScript (không phải trò chơi trên web mà là công cụ trò chơi sử dụng JavaScript, vốn là ngôn ngữ lập trình). Thật không may, công cụ JavaScript của trò chơi là SpiderMonkey
Đây là truy vấn SQL tôi đang sử dụng trong trang tôi đang xây dựng. Hiện tại nó chạy trong khoảng 8 giây và trả về 12000 bản ghi, khá chính xác, nhưng tôi tự hỏi liệu bạn có thể đưa ra gợi ý nào về cách làm cho nó chạy nhanh hơn không? CHỌN DISTINCT Adv
Làm thế nào để tối ưu hóa điều này? CHỌN e.attr_id, e.sku, a.value TỪ product_attr LÀ e, product_attr_text LÀ a NƠI e.attr
Tôi đang sử dụng một cấu trúc như thế này để kiểm tra xem phím mong muốn đã được nhấn hay chưa: def eventFilter(self, tableView, event): if event.type() == QtCore.QEven
Tôi đang sử dụng JavaScript để tính toán tất cả các tổ hợp cho một trận đấu cầu lông đôi từ danh sách người chơi nhất định. Mỗi người chơi sẽ hợp tác với những người khác. VÍ DỤ. Nếu tôi có những người chơi sau a, b, c, d. Sự kết hợp của chúng có thể là: a & b V c
Có vẻ như tôi không thể tìm ra cách để sử dụng JS này. Chức năng cuộn hoạt động nhưng không thể ẩn. Có cách nào để thực hiện việc này với ít dòng mã hơn không? Tôi muốn mũi tên .down-arrow mờ dần sau 50px
Câu hỏi của tôi liên quan đến các tệp CSS (Cascading Style Sheet) được tối ưu hóa nâng cao để sử dụng trong sản xuất. Thật là một trình tối ưu hóa/thu nhỏ css mới nhất và hoàn thiện nhất (sẵn sàng sử dụng trong các thành phần trực tiếp) không chỉ cung cấp khả năng loại bỏ khoảng trắng và ngắt dòng mà còn cung cấp các tính năng nâng cao như loại bỏ các thuộc tính thừa, hợp nhất
Tôi đã đọc điều này: Trình duyệt sẽ truy xuất tất cả các tài nguyên được yêu cầu trong phần HTML trước khi bắt đầu hiển thị. Nếu bạn đặt yêu cầu của mình trong một phần thay thế, thì việc hiển thị trang và tải xuống tài nguyên có thể diễn ra song song. Bạn nên yêu cầu càng nhiều tài nguyên từ thiết bị di động càng tốt.
Tôi đang làm việc trên một số mã C++ hiện có có vẻ được viết kém và có nhiều lệnh gọi thường xuyên. Tôi đang tự hỏi liệu mình có nên dành thời gian để thay đổi nó hay trình biên dịch đã tối ưu hóa vấn đề rồi. Tôi đang sử dụng Visual Studio 2008. Đây là một
Tôi đang cố gắng kết xuất 3 hình tứ giác (1 hình nền, 2 hình ảnh động) bằng OpenGL. Tôi có đoạn mã sau: void GLRenderer::onDrawObjects(long p_dt) {
Tôi có khai báo sau: isEnabled = false; if(foo(arg) && isEnabled) { .... } public boolean foo(arg) { some
(I) Hiểu cấu trúc chỉ mục theo cách đơn giản và dễ dàng. Trên thực tế, bạn có thể coi chỉ mục như một thư mục đặc biệt. Microsoft SQL SERVER cung cấp hai loại chỉ mục: chỉ mục cụm (còn gọi là chỉ mục cụm, chỉ mục cụm) và chỉ mục không cụm (non-clustered index).
1. Giải pháp tối ưu hóa CSS được viết ở trên chưa được đề cập trước đó, vì vậy chúng ta hãy tóm tắt lại ở phần sau. 2. Kế hoạch tối ưu cụ thể 2.1. Hiệu suất tải 1. Nén CSS: Đóng gói CSS đã viết có thể giảm đáng kể khối lượng. 2. CSS đơn phong cách: dưới đây cần thiết
Tôi là một lập trình viên xuất sắc, rất giỏi!